按列分组.如果为空,按其他列分组

本文关键字:其他 如果 | 更新日期: 2023-09-27 18:08:06

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

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分组。

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

在我的实际代码中,我在一个组中循环单个值,并对整个组进行线性回归,然后将所有组相互比较。我正在辩论只是循环在所有的数据点(行)单独,从那里找出他们属于什么组。性能在这里并不是真正的优先级,因为我有一个单独的进程在夜间运行这些东西,所以如果需要一段时间也没关系。

按列分组.如果为空,按其他列分组

空合并操作符也适用于实体框架。

的例子:

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