#c# #.net #cypher #neo4jclient
Вопрос:
У меня есть этот запрос cypherfluent, который возвращает пользовательский объект CustomFooQueryResult
, а не анонимный тип:
var query = new CypherFluentQuery(client) .Match("(foo:Foo)") .Return((foo) =gt; new CustomFooQueryResult { Foos = foo.CollectAsDistinctlt;FooDtogt;(), FooCount = (int)foo.CountDistinct() });
private class CustomFooQueryResult { [JsonProperty("foos")] public IEnumerablelt;FooDtogt; Foos { get; set; } [JsonProperty("fooCount")] public int FooCount { get; set; } } private class FooDto { public string FooProp { get; set; } }
После проверки сгенерированного запроса на шифр я обнаружил, что имена свойств класса используются в качестве псевдонимов переменных в сгенерированном операторе возврата.
Мне интересно, возможно ли или должно быть возможно повлиять на генерацию псевдонимов. Я бы хотел, чтобы они были camelcase, в то время как свойства моего класса остаются pascalcase. Я попытался использовать [JsonProperty("fooCount")]
, но все равно «FooCount» был сгенерирован как псевдоним.
Хотя это кажется незначительным неудобством, я связываю многие из этих запросов в виде подзапросов в вызовах, где я хотел бы иметь входные и выходные параметры в camelcase.
Вот что я попробовал: (используя .net5, Neo4jClient 4.1.18)
[Test] public void TestCustomReturnTypeWithJsonPropertyAttr() { // arrange var expectedCypher = "MATCH (foo:Foo)rnRETURN collect(distinct foo) AS foos, count(distinct foo) AS fooCount"; var client = Substitute.Forlt;IRawGraphClientgt;(); var query = new CypherFluentQuery(client) .Match("(foo:Foo)") .Return((foo) =gt; new CustomFooQueryResult { Foos = foo.CollectAsDistinctlt;FooDtogt;(), FooCount = (int)foo.CountDistinct() }); // act var resultCypher = query.Query.DebugQueryText; // results in: "MATCH (foo:Foo)rnRETURN collect(distinct foo) AS Foos, count(distinct foo) AS FooCount" // assert Assert.AreEqual(expectedCypher, resultCypher); }