Linq通过投影加入查询组到主要详细信息

时间:2016-03-28 20:50:58

标签: c# linq

需要帮助将此查询输出投影到主详细信息对象图中。

查询还需要按主字段分组。

预期的结果是每个主对象都会有详细对象的集合。

var q = from ee in db.Pages
        from ff in db.SubModules.Where(p => p.submoduleid == ee.submoduleid)
        from gg in db.Modules.Where(p => p.moduleid == ff.moduleid) 
        select new 
                            {
                           // detail fields
                                pageid = ee.pageid,
                                pagename = ee.pagename,
                                pageurl = ee.pageurl,
                                pgorder = ee.orderno,
                                pgstat = ee.status,

                           //Master fields from here
                                smid = ff.submoduleid,
                                smnm = ff.submodulename,
                                smorder = ff.orderno,
                                moduleid = gg.moduleid,
                                modulename = gg.modulename
                            };

提前致谢。

修改

实际情况涉及11个表并且非常复杂。我需要的东西不会破坏现有的查询连接结构。

编辑2

Master DTO应该有smid,smnm,smorder,moduleid,modulename和一组详细的DTO,其中包含其余的字段。

1 个答案:

答案 0 :(得分:1)

您不必更改查询,您可以使用ToLookup扩展从当前投影(q)创建新查询。 使用主数据作为查找键。

var md = q.ToLookup(ee=> new 
                    {
                        pageid = ee.pageid,
                        pagename = ee.pagename,
                        pageurl = ee.pageurl,
                        pgorder = ee.orderno,
                        pgstat = ee.status,
                    })
              .Select(c=> new 
                {
                    Master = c.Key, 
                    Details = c.Select(ff=>new 
                        {
                            smid = ff.submoduleid,
                            smnm = ff.submodulename,
                            smorder = ff.orderno,
                            moduleid = ff.moduleid,
                            modulename = ff.modulename  
                        }).ToList()
                });