左边加入Linq Group by Child table

时间:2017-02-23 19:36:44

标签: c# asp.net asp.net-mvc linq

我创建了一个填充列表的左连接;但是,现在我尝试按“类别”分组,并在“卷”上汇总,以汇总ASP.NET MVC视图中的数据。我遇到的问题是我所做的所有研究都显示左联接,其中分组字段源自父表与子表。在这种情况下,我试图通过SicCode(来自Buckets表)引入一个Category来进一步汇总投资组合数据(来自Portfolio表)。我想要从投资组合表中获取所有数据,然后从Buckets表中输入一个类别进行总结。下一步是对该类别进行分组,并为视图中的用户填充摘要数据。

我尝试在命令上添加组,但它不起作用。

感谢您的反馈意见。

以下是控制器中的代码:

var LpAb = (from l in db.Portfolio
    join a in db.Buckets on l.SicCodeLP equals a.SicCode into t
    from rt in t.DefaultIfEmpty()
    group rt by rt.Category into grouped
    select new
    {
        Category = rt.Category,
        TotalVolume = t.Sum(x => l.Volume)
    }).ToList();

Final Table应如下所示(列以“/”分隔)。

类别/计数/数量
•Crops / 1/384000
•专业/ 1/20465
•牲畜/ 1/80155

原始数据:

投资组合类
编号/日期/客户/ SicCodeLP /卷 1234/31-Dec-16 /客户/ 191/384000

铲斗类
SicCode / SicDetail / Pool / Category 191 /农场&作物/ 1 /作物

1 个答案:

答案 0 :(得分:0)

可以使用let关键字来保存相关子查询。

var LpAb = (
  from portfolio in db.Portfolio
  let category = db.Buckets
    .Where(b => l.SicCodeLP == b.SicCode)
    .FirstOrDefault()?.Category ?? ""
  group portfolio by category into g
  select new {
    Category = g.Key,
    TotalVolume = g.Sum(porfolio => porfolio.Volume)
  }).ToList();