实体框架组按实体类型

本文关键字:实体 类型 框架 | 更新日期: 2023-09-27 18:34:54

我有一个基本实体 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<...>