首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQ:合并2组

LINQ:合并2组
EN

Stack Overflow用户
提问于 2017-05-10 14:58:24
回答 2查看 77关注 0票数 0

这是表,我们称它为temp table

代码语言:javascript
复制
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是两个不同表的外键。

我想把这张桌子分组。

试过这个:

代码语言:javascript
复制
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不是temp table中所指的tb1tb2的主键。

EN

回答 2

Stack Overflow用户

发布于 2017-05-10 16:08:31

你可以用匿名类型来做。

代码语言:javascript
复制
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的对象。然后,您应该能够完成同样的事情,您想要做的与它分组。注意,实际数据以“数据”的形式存储在匿名中,您将有一个新的属性/列"FK",用于"SomeOtherId“。

票数 0
EN

Stack Overflow用户

发布于 2017-05-10 18:05:28

代码语言:javascript
复制
db.Temp.GroupBy(x => x.tb1Id ?? x.tb2Id);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43896169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档