我试图在运行时生成一个简单的 Lambda 表达式,但没有成功……就像这样:
var result = queryableData.Where(item => item.Name == "Soap")
这是我的示例类和一个可查询的夹具:
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
}
IQueryable<Item> queryableData = ...;
然后我在运行时生成一个 lambda 表达式正确的代码如下:
//"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 的建议!
最佳答案
在下面的查询中
var result = query.Where(item => item.Name == "Soap")
lambda 表达式是
item => item.Name == "Soap"
你只需要构建这部分,而不是接受表达式树的 Where 调用。
lambda 表达式的表达式树如下所示:
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# - 运行时的 Expression.Lambda 和查询生成,最简单的 "Where"示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315819/