Linq通过投影到主细节中加入了查询组

  • 本文关键字:查询 细节 投影 Linq 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

主DTO应该有smid、smnm、smorder、moduleid、modulename和一个将具有其余字段的详细DTO集合。

您不必更改查询,可以使用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()
                });

最新更新