【发布时间】:2013-12-05 05:05:10
【问题描述】:
我在一个名为GetName 的枚举上有一个扩展方法,它返回一个字符串。我在 linq to entity 框架中使用它来选择具有特定产品名称的行。然而,当代码被执行时,它会抛出一个NotSupportedException
LINQ to Entities 无法识别 System.String 方法 GetName(Tool.ViewModels.Product) 方法,该方法不能 翻译成商店表达式。
这是我正在执行的代码:
try
{
//Linq to Entity Framework
var contextRow = Contexts.Data.Source.SingleOrDefault(p => p.Product == Product.ProductOne.GetName());
}
catch (Exception e)
{
throw e;
}
Linq 在其评估中不识别扩展方法吗?还是有更多的事情发生?
【问题讨论】:
-
这种问题在开始使用Entity Framework的时候是非常有名的:)
-
出行很容易,我只是好奇为什么会这样。
-
“这个方法不能翻译成store表达式”,意思是:没有办法把这个翻译成SQL。
-
原因与 EF 的工作方式有关,所有查询都将被翻译成底层提供程序语言,可能是 SQL Server。由于不完全支持多种表达式的翻译,在这种情况下会抛出异常。
-
@KingKing,如果它使用 SQL 作为提供程序语言,我会理解,但我相当肯定它不是。数据来自sql server中的一个视图,但是我在应用程序启动时枚举它[只有几行]。
标签: c# linq entity-framework