无法创建对象并在neo4jclient查询中设置其布尔属性。
到目前为止,我正在与neo4jclient做一个项目,效果很好。但是现在当我尝试将在查询中创建的对象的属性设置为true时,会引发此异常:
不支持类型为System.Linq.Expressions.ConstantExpression的表达式。
查询很简单:
return await _graphClient.Cypher.Match("(u1:User)-[:FOLLOW]->(u2:User)")
.Where((UserModel u1) => u1.Id == userId)
.Return(u2 => new UserWithRelationsDto { User=u2.As<UserModel>(), IsFollow = true })
.Limit(usersToShow)
.ResultsAsync;
我尝试使用具有真实值的布尔变量。但会引发不同的异常:
不支持表达式值(DAL.Repositories.Neo4jUsersRepository + <> c__DisplayClass5_1).isFollow
var isFollow = true;
return await _graphClient.Cypher.Match("(u1:User)-[:FOLLOW]->(u2:User)")
.Where((UserModel u1) => u1.Id == userId)
.Return(u2 => new UserWithRelationsDto { User=u2.As<UserModel>(), IsFollow = isFollow })
.Limit(usersToShow)
.ResultsAsync;
如果我将bool属性取出,则查询有效。 可能是错误?周围有工作吗?
答案 0 :(得分:1)
对不起,我错过了,还有另一种方法,那就是使用With
语句:
var isFollow = false;
await _graphClient.Cypher
.Match("(u:User)")
.With($"{{IsFollow:{isFollow}, User:u}} AS u2")
.Return(u2 => u2.As<UserWithRelationsDto>())
.ResultsAsync;
或者您可以直接使用true
:
await _graphClient.Cypher
.Match("(u:User)")
.With($"{{IsFollow:{true}, User:u}} AS u2")
.Return(u2 => u2.As<UserWithRelationsDto>())
.ResultsAsync;
也许最简单的就是:
await _graphClient.Cypher
.Match("(u:User)")
.With("{IsFollow:true, User:u} AS u2")
.Return(u2 => u2.As<UserWithRelationsDto>())
.ResultsAsync;
无论哪种方式-.With
都允许您在Cypher中创建一个匿名类型,您可以将其直接解析到DTO中。
答案 1 :(得分:0)
解决方法:
return await _graphClient.Cypher.Match("(u1:User)-[r:FOLLOW]->(u2:User)")
.Where((UserModel u1) => u1.Id == userId)
.Return((u2,r) => new UserWithRelationsDto { User=u2.As<UserModel>(), IsFollow = r!=null})
.Limit(usersToShow)
.ResultsAsync;