Enum上的扩展方法导致Linq查询失败

时间:2013-11-20 22:59:25

标签: c# linq entity-framework

我在Enum上有一个名为'GetName'的扩展方法,它返回一个字符串。我在linq中使用它来实体框架来选择具有特定产品名称的行。但是,当代码执行时,它会抛出'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在评估中是否不承认扩展方法?还是还有更多事情要发生?

2 个答案:

答案 0 :(得分:1)

实体框架将您键入的代码映射到SQL查询。当它看到对GetName的调用时,它会看到对用户定义函数的调用。它没有能力将基本上等于原始IL的内容转换为格式良好的SQL查询。这就是你得到那个例外的原因

答案 1 :(得分:0)

使用LINQ时,你必须定义一个上下文并在该上下文中对数据库执行操作,例如你想要运行的代码,你可以这样做

使用(ModelLinq _context = new ModelLinq()){

var rows = _context.anyTable.Where(p => p.anyColumn == value);

}

实体框架是您的数据库的映射,您可以使用lenguale c#

执行SQL查询

问候!