我在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在评估中是否不承认扩展方法?还是还有更多事情要发生?
答案 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查询问候!