Expression.Lambda和查询生成在运行时,最简单的“Where”示例

我试图在运行时生成一个简单的Lambdaexpression式,没有运气…像这样的东西:

var result = queryableData.Where(item => item.Name == "Soap") 

这是我的例子类和夹具查询:

 public class Item { public int Id { get; set; } public string Name { get; set; } } IQueryable<Item> queryableData = ...; 

然后我在运行时生成一个lambdaexpression式, 正确的代码如下

 //"item" in "item =>..." var item = Expression .Parameter(typeof(Item), "item"); //property of my item, this is "item.Name" var prop = Expression .Property(item, "Name"); //then "Soap" in '... => item.Name=="Soap"' var value = Expression.Constant("Soap"); //equality expression "==" in my primer var equals = Expression.Equal(prop, value); //then lambda var lambda = Expression.Lambda<Func<Item, bool>>(equals, item); //and here are the results var results = queryableData.Where(lambda); 

非常感谢dtb的build议!

One Solution collect form web for “Expression.Lambda和查询生成在运行时,最简单的“Where”示例”

在下面的查询中

 var result = query.Where(item => item.Name == "Soap") 

lambdaexpression式是

 item => item.Name == "Soap" 

你只需要构build这个部分,而不是接受expression式树的Where调用。

lambdaexpression式的expression式如下所示:

  Lambda / \ Equal Parameter / \ item Property \ "Name" Constant | "Soap" Parameter item 

在代码中:

 var item = Expression.Parameter(typeof(Item), "item"); var prop = Expression.Property(item, "Name"); var soap = Expression.Constant("Soap"); var equal = Expression.Equal(prop, soap); var lambda = Expression.Lambda<Func<Item, bool>>(equal, item); var result = queryableData.Where(lambda); 
  • 通过引用在C ++ 11 lambda中捕获参考
  • 独特()与lambda?
  • 可以expressionlambdaexpression式的“types”吗?
  • 从lambdaexpression式中检索属性名称
  • Java 8:使用换行符和缩进格式化lambda
  • Java 8stream映射到按值sorting的键列表
  • 一个正面的lambda:'+ {}' - 这是什么巫术?
  • 为什么必须把一个完整的代码块放在lambda体中呢?
  • 将对象从MemberExpression中取出?
  • 行家。 lambdaexpression式在-source 1.5中不受支持
  • Java8的Lambda和例外