Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 子表上的左联接Linq Group by_C#_Asp.net_Asp.net Mvc_Linq - Fatal编程技术网

C# 子表上的左联接Linq Group by

C# 子表上的左联接Linq Group by,c#,asp.net,asp.net-mvc,linq,C#,Asp.net,Asp.net Mvc,Linq,我创建了一个填充列表的左连接;但是,现在我尝试按“类别”分组,并在“卷”上求和,以便在ASP.NET MVC的视图中汇总数据。我遇到的问题是,我所做的所有研究都显示了左连接,其中分组字段来自父表而不是子表。在本例中,我试图通过SicCode(从bucket表)拉入一个类别,以进一步汇总投资组合数据(从投资组合表)。我需要投资组合表中的所有数据,然后从Buckets表中引入一个类别进行汇总。下一步是对该类别进行分组,并为视图中的用户填充摘要数据 我试图在命令上添加组,但它不起作用 我感谢你的反馈

我创建了一个填充列表的左连接;但是,现在我尝试按“类别”分组,并在“卷”上求和,以便在
ASP.NET MVC
的视图中汇总数据。我遇到的问题是,我所做的所有研究都显示了左连接,其中分组字段来自父表而不是子表。在本例中,我试图通过SicCode(从bucket表)拉入一个类别,以进一步汇总投资组合数据(从投资组合表)。我需要投资组合表中的所有数据,然后从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();
最终的表应该是这样的(列之间用“/”分隔)

类别/数量/数量
•农作物/1/384000
•专业/1/20465
•牲畜/1/80155

原始数据:

组合类
编号/日期/客户/SicCodeLP/数量 1234/31-Dec-16/Customer/191/384000

桶类
SicCode/SicDetail/Pool/Category
191/Farms&Crops/1/Crops

可以使用
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();

可以使用
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();

下一步是对该类别进行分组,因此
group。。。在您的查询中…
?问题是什么?如果您想按
类别进行分组
,您真的需要外部联接吗?可能有一个
null
组。我在代码中有这个group by语句,但它不起作用。它列出了投资组合表中的所有记录,但没有对它们进行分组。var LpAb=(从db.LoanPortfolio中的l将l.SicCodeLP上的db.allowancebucket中的a连接到t.DefaultIfEmpty()中的rt中的a.SicCode)将rt按rt分组。类别分组。因此,请在问题中说明失败的位置/原因。一个投资组合是有多个桶还是只有一个桶?如果一个投资组合有两个桶,您希望该组合在结果中计数两次吗?下一步是在该类别上分组,因此在您的qu中,
group…by…
是吗?那有什么问题吗?如果你想按
类别
分组,你真的需要外部联接吗?可能有一个
null
组。我在代码中有这个group by语句,但它不起作用。它列出了公文包表中的所有记录,但没有对它们进行分组。var LpAb=(从db.LoanPortfolio中的l将l.SicCodeLP上的db.allowancebucket中的a加入到t中等于a.SicCode从t.DefaultIfEmpty()中的rt加入到t中)将rt按rt分组。分类为Grouped。因此,请在您的问题中说明失败的位置/原因。一个投资组合是有多个桶还是只有一个桶?如果一个投资组合有两个桶,您希望该组合在结果中计数两次吗?感谢您将其放在一起。我收到此错误。运算符“??”无法应用于类型为“int”和“string”的操作数位于存储桶上。类别???-1放入g行。感谢您将其放在一起。我收到此错误。运算符“??”不能应用于类型为“int”和“string”的操作数位于存储桶上。类别???-1放入g行。