首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >1:m关系中的最优LinqToSql GroupBy查询

1:m关系中的最优LinqToSql GroupBy查询
EN

Stack Overflow用户
提问于 2013-08-22 12:12:22
回答 1查看 58关注 0票数 0

我有两个数据库表(与关系1:m相连):

地点(locId,locName)

1,美国

2,德国

3,西班牙

亚位(subLocId,subLocName,locId)

1,丹佛,1

2,底特律,1

3,纽约,1

4,汉堡,2

5,柏林,2

6,慕尼黑,2

7岁,马德里,3岁

8,巴塞罗那,3

9,巴伦西亚,3

通过使用Linq到Sql,我需要填充LocationDto,如: LocationDto (locId,subLocId,name)

1,null,美国

1,1,丹佛

1,2,底特律

1,3,纽约

2,零,德国

2,4,汉堡

2,5,柏林

2,6,慕尼黑

西班牙,null

3、7、马德里

3、8,巴塞罗那

3、9、巴伦西亚

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-22 12:26:23

创建一个新的类来保存已连接的对象:

代码语言:javascript
运行
复制
public class JoinedLocations
{
    public int locId{get;set;}
    public int? subLocId{get;set;}
    public string Description{get;set;}
}

然后运行此查询。

代码语言:javascript
运行
复制
var query = 
Location
.GroupJoin
(
    Sublocations.DefaultIfEmpty(),
    l=>l.locId,
    s=>s.locId,
    (l,s)=>new {l,s}
)
.SelectMany
(
    x=>
    x.s.DefaultIfEmpty
    (
        new Sublocations
        {
            subLocId=-1,
            subLocName="",
            locId=-1
        }
    ),
    (l,s)=> 
    new JoinedLocations
    {
        locId=l.l.locId,
        subLocId=s.subLocId,
        Description = (s.subLocId==-1?l.l.locName:s.subLocName)
    }
)
.Union
(
    loc
    .Select
    (
        x=>
        new JoinedLocations
        {
            locId=x.locId,
            subLocId=null,
            Description = x.locName
        }
    )
)
.OrderBy(x=>x.locId)
.ThenBy (x => x.subLocId)

这会给你你想要的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18380072

复制
相关文章

相似问题

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