我想獲得有兩個賬戶的客戶,一個是Type1,另一個是Type2。 Cygher查詢如下Neo4j Cypher使用'WITH'查詢C#
MATCH (client:Client)-[:OWNED_BY]-(account:Account)-[:TYPE_IN]-(type:Type)
With client, account, type
MATCH (client)-[:OWNED_BY]-(account1:Account)-[:TYPE_IN]-(:Type{accountType: 'Type1'})
,(client)-[:OWNED_BY]-(account2:Account)-[:TYPE_IN]-(:Type{accountType: 'Type2'})
RETURN client, account, type
它的工作原理(任何增強是值得歡迎的,但這不是我的問題)
我怎樣才能把它轉換成C#?特別是「與客戶,帳戶,類型」部分。我有Neo4j.client
我設法做到這一點,
StringBuilder queryString =new StringBuilder();
StringBuilder addtionQuery = new StringBuilder();
queryString.Append("(client:Client)-[:OWNED_BY]-(account:Account)-[:TYPE_IN]-(type:Type)");
addtionQuery.Append(String.Format("(client)-[:OWNED_BY]-(account0:Account)-[:TYPE_IN]-(:Type{{accountType: '{0}'}})"
, searchCriteria.acctTypes[0]));
for (int i = 1; i < searchCriteria.acctTypes.Length; i++)
{
if (searchCriteria.acctTypes[i] != null)
{
addtionQuery.Append(",");
addtionQuery.Append(String.Format("(client)-[:OWNED_BY]-(account{1}:Account)-[:TYPE_IN]-(acct_type{1}:Type{{accountType: '{0}'}})",
searchCriteria.acctTypes[i], i));
}
}
var query = Dbclient.Cypher
.OptionalMatch(queryString.ToString())
.With((client, account, type) => new
{
client = client.As<Client>(),
type = type.As<Demo1.Models.Type>(),
account = account.As<Account>()
})
.OptionalMatch(addtionQuery.ToString())
.Return((client, account, type) => new QueryResult
{
cif = client.As<Client>().cif,
type = type.As<Demo1.Models.Type>().accountType,
accountId = account.As<Account>().accountId
})
.Limit(searchCriteria.limit)
.Results;
它的工作原理,但結果是不正確
query.Query.QueryText或query.Query.DebugQueryText沒有幫助,我用匹配取代了第二個選項匹配,它現在可以工作。涼 – Leo 2014-10-03 00:54:55