【问题标题】:EntityFramework GroupBy Entity Type实体框架按实体类型分组
【发布时间】:2012-05-21 13:50:51
【问题描述】:

我有一个基础实体 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()” 方法,并且该方法不能翻译成商店表达式。

如何按类型对派生实体进行分组?

【问题讨论】:

  • 您找到解决方案了吗?我面临着完全相同的问题。
  • 你们找到解决办法了吗?

标签: c# entity-framework-4


【解决方案1】:

如果类型是预定义的,你可以使用Enumerable.OfType Method

var acs = context.A.OfType<AC>().Count();

【讨论】:

  • 谢谢,但我用 GroupBy() 来做。类型是通用的。
  • 类型泛型是什么意思?
  • 我有一个函数,函数的第一个参数是基本实体的类型。在这个问题中,基本实体是 A,函数返回 AA、AB、AC... 和记录计数。但是当基础实体是 X 时,函数必须返回 XY、XZ、XX 和记录计数。解释了吗?
【解决方案2】:

在调用 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 的分组类型<...>

【讨论】:

  • 是的,这是可行的,但我可能有数百万条记录。在 LINQ to Entities 中以某种方式做到这一点?
  • 你不能,正如它所说.. LINQ to Entities 不支持.GetType(),你如何将GetType() 转换为sql? SQL不支持继承,它是entitiy-framework在代码中实现的功能。
  • 你能按判别式过滤吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-31
相关资源
最近更新 更多