【发布时间】:2011-06-21 14:15:38
【问题描述】:
我正在尝试构建一个通用方法,EF4.1 在数据库和本地内存中查找与特定条件匹配的表中的特定行。
到目前为止,这就是我所拥有的。
这是来电者。
dbEntities.MyTables.LocalAndDb(delegate(MyTable s)
{ return s.Description.Contains("test"); });
这是 LocalAndDb
public static object LocalAndDb<T>(this DbSet<T> myTable, Func<T, bool> function) where T : class
{
// look in local
var item = myTable.Local.Where(o => function((T)o)).FirstOrDefault()
// if not exist, look in the database
if (item == null)
{
Expression<Func<T, bool>> predicate = (u) => function(u);
item = myTable.Where(predicate).FirstOrDefault();
}
return item;
}
问题出在这一行。
item = myTable.Where(predicate).FirstOrDefault();
当它调用数据库时,它会抛出这个错误。
“LINQ to Entities 不支持 LINQ 表达式节点类型 'Invoke'。”
我想这是因为我传入了一个匿名方法,但它不知道如何将其转换为 SQL。我认为将其转换为 Expression 对象可以解决问题,但它仍然不适合我。
我需要做什么才能使匿名方法变成 LINQ 可以转换为 SQL 的东西?
【问题讨论】:
标签: c# .net entity-framework entity-framework-4.1 expression