按列分组。如果为null,则按其他列分组

时间:2014-06-10 19:59:52

标签: c# entity-framework

在实体框架中,我正在处理一个带有自引用列的表,这个列是这样创建的,我无法改变这种结构,因为它已经被用在了太多的地方。项目:

Entities
--------
CreationDate         | EntityID | OriginalEntityID |    Name
2014-01-02 10:02:02  |   819    |        NULL      | First draft
2014-02-05 14:04:20  |   899    |        819       | Second draft
2014-05-16 02:45:40  |   907    |        819       | Third draft
2014-05-16 02:45:40  |   908    |        NULL      | Other entity

然后还有另一张表格如下:

EntityValues
------------
EntityValueID | Value | EntityID
       1      |  20   | 819
       2      |  30   | 899
       3      |  25   | 899
       4      |  12   | 907
       5      |  20   | 908
       6      |  99   | 908

我需要在实体框架中进行分组,以便上面的示例数据返回两组值,如下所示:

Values
------
  20
  30
  25
  12

Values
------
  20
  99

有没有办法在实体框架中做到这一点?基本上,按OriginalEntityID分组,但如果该分组为空,则按EntityID分组。

我不知道从哪里开始,所以我可以尝试的代码不多。

在我的实际代码中,我循环遍历组中的各个值并对整个组进行线性回归,然后将所有组相互比较。我正在辩论只是循环遍历所有数据点(行),并从那里找出它们属于哪个组。性能在这里并不是一个优先事项,因为我有一个单独的进程在一夜之间运行这些东西所以如果需要一段时间它就可以了。

1 个答案:

答案 0 :(得分:10)

null coalescing operator也适用于实体框架。

示例:

db.EntityValues.GroupBy(v => v.Entity.OriginalEntityID ?? v.Entity.EntityID);