【发布时间】:2020-01-21 13:48:13
【问题描述】:
任务:我需要在LINQ's 中提供一些带参数的表达式,从database 获取一些数据,但上面有错误
这个工作表达式的例子:
var shopExp = GetPersonForShop(PersonTypeIds.Director, new Guid("adda423f-8c38-40e0-9f39-6deceb787bc0")); // id
Where(shopExp)
但我需要动态分配 id,但上面出现错误:
_repository.Persons
.Where(GetPersonForShop(PersonTypeIds.Director, person.PersonId)
得到错误:
{"无法将 'System.Linq.Expressions.InstanceMethodCallExpression2' 类型的对象转换为 'System.Linq.Expressions.LambdaExpression' 类型。"}
where(linq) 的函数看起来如何:
private Expression<Func<Person, bool>> GetPersonForShop(PersonTypeIds personTypeId, Guid personId)
{
return person => person .PeronTypeId== (int) personTypeId && person .PersonId == personId;
}
这是大概的样子,只是改变参数代码的名称
如何将带参数的表达式添加到Where 子句??
【问题讨论】:
-
GetPersonForShop的签名是什么? -
EF/EF Core 已经允许动态查询。有多个答案显示如何动态添加
Where子句。我怀疑真正的问题是在 EF 之上添加一个“通用”存储库并失去执行 LINQ 查询的能力 -
我添加了有关此任务的更多信息。是的,我知道 lambda 是如何工作的,我需要将带参数的表达式(返回表达式的函数)移动到 'where' linq 方法中。
-
我很困惑。首先您使用
GetPersonForShop,然后向我们展示具有相同(明显)签名的GetKpisForEntity方法。您不只是对这两个方法名称感到困惑吗?你的代码中也有很多错别字,这让我们无法判断你是在写问题还是自己写代码的时候打错了。 -
据我所知,这应该对您有所帮助:[ref] stackoverflow.com/questions/14297633/…
标签: c# sql linq .net-core ef-core-3.0