通常,如果我创建一个作用于实体的扩展方法:
public static MyEntity Foo(this MyEntity entity)
{
// do something to the entity
}
在Linq-To-Entities的投影中,不能直接使用它,如下所示:
var result = myContext.MyEntities.Select(x=> x.Foo());
这样做会产生错误,例如:
System.NotSupportedException:LINQ to Entities无法识别 方法'Foo(MyEntity)'方法,这个方法无法翻译 进入商店表达。
我完全理解为什么会出现这种错误。我的问题是:如果我可以提供使用表达式树的Foo实现,是否有某种方法可以将Foo添加到LINQ-to-entities理解的操作中?如果是这样 - 怎么样?
注意:我当然可以将其转换为这样的列表:
var result = myContext.MyEntities.ToList().Select(x=> x.Foo());
并没有错误。但我不再拥有智商。我有一个IEnumerable。如果我这样使用它:
var result = myContext.MyEntities.ToList().Select(x=> x.Foo()).First();
我最终会拿到所有实体,然后再拿掉最重要的实体并放弃其余实体 - 这对性能来说太可怕了。