我有一个基本实体 A 和派生实体:AA、AB、AC、AD
context.A.GroupBy(x => x.GetType()).Select(x => new { type=x.GetType(), count = x.Count() });
当然我得到错误:
LINQ to Entities 无法识别方法“System.Type GetType()”方法,并且此方法无法转换为存储表达式。
如何按类型对派生实体进行分组?
我有一个基本实体 A 和派生实体:AA、AB、AC、AD
context.A.GroupBy(x => x.GetType()).Select(x => new { type=x.GetType(), count = x.Count() });
当然我得到错误:
LINQ to Entities 无法识别方法“System.Type GetType()”方法,并且此方法无法转换为存储表达式。
如何按类型对派生实体进行分组?
如果类型是预定义的,您可以使用Enumerable.OfType 方法
var acs = context.A.OfType<AC>().Count();
在调用 GroupBy 之前,您需要将实体水合到内存中 - 这样 x.GetType() 调用将由 LINQ to Objects 而不是 LINQ to Entities 处理。尝试这样做:
context.A.ToList().GroupBy(x => x.GetType()).Select(x => new { type=x.Key, count = x.Count() });
我更改了它,因此您在选择中调用 x.Key 而不是 x.GetType() ,否则您将获得类似于 IGrouping<...> 的分组类型