c# - 将表达式类与 LINQ 查询一起使用

标签 c# entity-framework linq

我想知道是否有一种方法可以将 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/

相关文章:

.net - `SELECT MIN(ZoneMin), MAX(ZoneMin) FROM Plant` 作为 LINQ to SQL

c# - 一个语句中的 Linq 和 foreach 是否优于 2 个单独的显式语句?

c# - Windows UIAutomation 有时会挂起其他应用程序

c# - 如何在运行时定义 C# 对象?

c# - NLog - 删除早于 X 天的日志

c# - 如何将 "SELECT col, COUNT(*)"转换为 Linq 表达式?

c# - DbContext SaveChanges() - 检测更新的实体

c# - 代码优先 :The specified named connection is either not found in the configuration

C# linq filter 加 concat

c# - 如何将datagridview中的单元格值保存到列表<list<>>