LINQ to Entities 不识别方法“”,因此该方法无法转换为存储表达式。
LINQ to Entities 不识别方法“XX”,因此该方法无法转换为存储表达式
使用LINQ to Entities一不小心就会碰上类似的错误:
引用内容
。LINQ to Entities 不识别方法“XX”,因此该方法无法转换为存储表达式
总结了下,出现这种错误情形大体分为两种,下边分别举例并说下解决方法。
情形一
报错代码:
string age = "20"; var query = from item in context.People where item.Age == int.Parse(age) select item;
这边age是一个外部值,试图中LINQ to Entities中类型转化,不支持,所以报错,只需在LINQ to Entities前先转化类型即可解决:
int age = int.Parse("20"); var query = from item in context.People where item.Age == age select item;
情形二
报错代码:
var query = from item in context.People group item by item.Created.ToShortDateString() into g select new { Created = g.Key, Count = g.Count() };
这边要转化的是字段值,因而无法像情形一那样在外部先处理,解决方法是将数据先从数据库读取出来,然后在内存中使用LINQ to Objects解决:
//ToList()就是转化为内存保存起来 var query = from item in context.People.ToList() group item by item.Created.ToShortDateString() into g select new { Created = g.Key, Count = g.Count() };
----------------------------------------------------------------------------------------------------------------------------------------------------
这次出行报错的代码
public IQueryable<RoleFunction> GetSubRoleList(int parentRoleId) { var items = _lotteryServiceContext.RoleFunctions.Where(m => m.ParentRoleId == parentRoleId); return items.Concat(items.SelectMany(i => GetSubRoleList(i.RoleId))); }
因为IQueryable是延迟加载,属于情形二。

浙公网安备 33010602011771号