LINQ-To-Entities可以扩展吗?

时间:2011-12-10 02:37:34

标签: entity-framework linq-to-entities expression-trees

通常,如果我创建一个作用于实体的扩展方法:

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();

我最终会拿到所有实体,然后再拿掉最重要的实体并放弃其余实体 - 这对性能来说太可怕了。

1 个答案:

答案 0 :(得分:2)

使用LINQKit项目,但不是你的方法foo,你将不得不编写相当的表达式树。