【发布时间】:2014-09-15 06:48:39
【问题描述】:
我有一个实体。
public class Foo
{
public int Id { get; set; }
public string Name { get; set; }
public string Code { get; set; }
}
我想创建自己的表达式谓词。为此,我创建了一个接受属性名称和值的方法。
private static Expression<Func<Foo, bool>> Condition(string pName, object value)
{
var pe = Expression.Parameter(typeof(Foo), "foo");
var left = Expression.Property(pe, pName);
var right = Expression.Constant(value);
var equal = Expression.Equal(left, right);
var predicate = Expression.Lambda<Func<Foo, bool>>(equal, pe);
return predicate;
}
这是适用于单个条件的谓词。
using (var db = new MyEntities())
{
var predicate = Condition("Name", "foo");
var foos = db.Foos.Where(predicate).ToArray();
}
但是当我尝试按照this post 组合两个条件时,它会抛出异常。
参数“foo”未绑定在指定的 LINQ to Entities 中 查询表达式。
using (var db = new MyEntities())
{
var cond1 = Condition("Name", "foo");
var cond2 = Condition("Code", "bar");
var body = Expression.AndAlso(cond1.Body, cond2.Body);
var predicate = Expression.Lambda<Func<Foo,bool>>(body, cond1.Parameters[0]);
var foos = db.Foos.Where(predicate).ToArray(); // exception
}
请赐教。
【问题讨论】:
标签: c# linq entity-framework linq-expressions