我有这样的方法:表达和参数
public static Expression<Func<MyEntity, bool>> MyMethod(string someId)
{
return o => o.SomeProperty.Equals(someId);
}
这被传递到使用实体框架与此表达式来检索匹配项目的另一种方法。我的问题是它不起作用。如果我将someId替换为Equals调用的一部分,并使用它的实际值。但是,如果我将上面的方法传入相同的值,则不起作用。
这是否意味着someId参数没有得到评估,直到表达实际使用,因此并不包含实际的价值?对不起,这里有点困惑。
感谢
更新:
对于一个没有工作,而且参数是硬编码
.Lambda #Lambda1<System.Func`2[MyEntity,System.Boolean]>(MyEntity $t) {\r\n .Call ($t.SomeProperty).Equals(\"test1\")
的一个地方不工作的一些调试信息的一些调试信息该值被传递到该方法
.Lambda #Lambda1<System.Func`2[MyEntity,System.Boolean]>(MyEntity $t) {\r\n .Call ($t.SomeProperty).Equals(.Constant<MyEntity+<>c__DisplayClass4>(MyEntity+<>c__DisplayClass4).someId)
我在猜测什么时候这个值没有被硬编码,表达式是否有一个不存在的东西的引用?对不起,让自己陷入这里发生的事情!
更新2:
这是正在被使用的地方 - 在储存库中的类的方法:
public MyEntity Get(string someId)
{
var queryPredicate = MyEntity.MyMethod(someId);
var foundEntity = this.Query(queryPredicate);
}
查询是在储存库基类,如下的方法:
public IEnumerable<TEntity> Query(Expression<Func<TEntity, bool>> predicate)
{
if (predicate == null)
{
throw new ArgumentNullException("predicate");
}
using (var context = new TContext())
{
return context.CreateObjectSet<TEntity>().AsExpandable().Where(predicate).ToList();
}
}
你能显示你想要使用这个结果的代码? – 2010-07-09 16:53:30