gpt4 book ai didi

c# - 将表达式> 转换为表达式>

转载 作者:太空宇宙 更新时间:2023-11-03 21:46:04 27 4
gpt4 key购买 nike

我有这样的表情

(a,b) => a.Id == b.Id

我想在 LINQ to Entities 查询中使用它

T GetSingle(IRepository<T> repository, Func<T,T,bool> predicate, T entity)
{
return repository.GetAll().Single(e => predicate(e, entity))
}

但这会导致异常:LINQ to Entities 不支持 LINQ 表达式节点类型“Invoke”
据我所知,我可以使用表达式为 LINQ2SQL 构造一个有效谓词,所以我的表达式(a,b) => a.Id == b.IdId = 5 的实体实例可以产生新的表达式 (a) => a.Id == 5.
最后一个表达式适用于 LINQ to Entities。

我找到并阅读了这篇文章
Replace parameter in lambda expression
http://www.codeproject.com/Articles/143096/Parameter-Substitution-within-Expression-Trees
但仍然不知道如何解决我的任务

那么,如何动态转换给定的表达式?

最佳答案

你为什么不把你的方法改成:

T GetSingle(IRepository<T> repository, Expression<Func<TSource, Boolean>> predicate)
{
return repository.GetAll().Single(predicate);
}

所以不是这个:

GetSingle(myRepository, (a,b) => a.Id == b.Id, myEntity);

你应该能够做到这一点:

GetSingle(myRepository, a => a.Id == myEntity.Id);

关于c# - 将表达式<Func<T,T,bool>> 转换为表达式<Func<T,bool>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16985310/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com