LINQ to Entities无法识别该方法,如何修复

时间:2014-04-15 15:33:47

标签: c# linq

我有以下查询:

var query = (from e in conn.equipments
             select new 
             {
                  id = e.id,
                  status = GetEquipmentStatusText(e.status)
             }).ToList();

public static string GetEquipmentStatusText(int status) {
   return (status == 1) ? "Active" : "Not Active";
}

这会导致错误:LINQ to Entities无法识别方法

如何以“GetEquipmentStatusText”集中到可以在其他LINQ查询中调用的方法的方式修复它?

1 个答案:

答案 0 :(得分:3)

不要使用该方法调用来代替您的情况。

status = e.status == 1 ? "Active" : "Not Active"

LINQ to EF会尝试将您的LINQ表达式转换为铺设数据源语言(可能是SQL),并且由于SQL不了解您的方法,因此它将失败。

您可以在没有该方法的情况下执行查询,然后在内存中集合上执行您的方法。像:

var query = (from e in conn.equipments
             select new 
             {
                  id = e.id,
                  status = e.status
             }).AsEnumerable(); //as Servy pointed out

var result = (from e in query 
             select new 
             {
               id = e.id, 
               status = GetEquipmentStatusText(e.status)
             }).ToList();