LINQ:结合2组

时间:2017-05-10 14:58:25

标签: c# linq

在表格中,我们称之为temp table

ID    Type   tb1Id    tb2Id      Detail
1     tb1    a        null       Detail of 1
2     tb2    null     b          Detail of 2
3     tb1    a        null       Detail of 3
4     tb2    null     b          Detail of 4

现在,ab是2个不同表的外键。

我想将此表分组。

试过这个:

var list1 = db.Temp.Where(x=> x.tb1Id != null).GroupBy(x=> x.tb1.SomeOtherId);
var list2 = db.Temp.Where(x=> x.tb2Id != null).GroupBy(x=> x.tb2.SomeOtherId);
var final = list1.Union(list2); <-- This doesn't work

注意: SomeOtherId不是tb1

中引用的tb2temp table的主键

2 个答案:

答案 0 :(得分:0)

您可以使用匿名类型执行此操作。

var reclassified = db.Temp
       .Where(item => item.tb1Id != null || item.tb2Id != null)
       .Select(item => 
          new 
          { 
                data = item, 
                FK = (item.tb1ID != null) ? 
                      item.tb1.SomeOtherId : 
                      item.tb2.SomeOtherId
               }
          );

运行此查询后,您将拥有所有具有id的对象。那么你应该能够完成你想要做的同样的事情。请注意,实际数据然后存储在匿名的数据中。并且你有一个新的属性/列,&#34; FK&#34;,用于&#34; SomeOtherId&#34;

答案 1 :(得分:0)

db.Temp.GroupBy(x => x.tb1Id ?? x.tb2Id);