我想知道是否有一种方法可以将 Expression 类用于带有 LINQ 查询的自定义查询,例如这个
Expression<Func<TEntity, bool>> expression = (x) => x.Id = 1
var items = from item in context.TEntity
where expression
select item
我知道有一种方法可以使用 LINQ 函数来执行此操作,因为 Where 函数将表达式作为参数,但我确实需要使用 LINQ 查询来执行此操作
注意:上面的代码只是一个示例,让您了解我正在尝试做的事情,它不是实际的工作代码
注意 2:我需要这个来与 Entity Framework 一起工作
最佳答案
不幸的是, Entity Framework 本身并不支持这种类型的表达式投影,这就是为什么像 where expression.Compile().Invoke(item);
这样的常见尝试会在运行时抛出异常.
但是,如果您使用 LinqKit库(利用表达式访问者)并在实体集上调用 .AsExpandable()
,然后您可以动态调用表达式:
Expression<Func<TEntity, bool>> expression = x => x.Id == 1;
var items = from item in context.Set<TEntity>.AsExpandable()
where expression.Invoke(item)
select item;
关于c# - 将表达式类与 LINQ 查询一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36323702/