LINQ:根据另一个列值选择一列

问题描述 投票:0回答:2

执行一些LINQ后,我将这些数据作为匿名类型的IQueryable

Cat  Type  Count
----------------
A     1     10
B     1     15
C     1     25
D     1     5
A     2     15
C     2     30
D     2     20
B     2     10

现在,对于每个Cat,我想根据LINQ的Type值选择Count。

输出应该是这样的:

Cat  Type1Count  Type2Count
---------------------------
A       10           15
B       15           10
C       25           30 
D       5            20
c# sql sql-server linq
2个回答
1
投票

你可以尝试使用groupby然后使用select做转轴。

var query = myList
    .GroupBy(c => c.Cat)
    .Select(g => new {
        Cat  = g.Key,
        Type1Count = g.Where(a => a.Type == 1).Sum(c => c.Count),
        Type2Count = g.Where(a => a.Type == 2).Sum(c => c.Count)
    });

c# online

结果

Cat:A  Type1Count:10  Type2Count:15
Cat:B  Type1Count:15  Type2Count:10
Cat:C  Type1Count:25  Type2Count:30
Cat:D  Type1Count:5  Type2Count:20

0
投票

所以基本上你需要按Cat和Type分组并得到Count的总和:

myList.GroupBy(x => new { x.Cat, x.Type }).Select(x => new { Cat = x.Key.Cat, Type = x.Key.Type, CountForTypeAndCat = x.Sum(y=>y.Count) })

这将允许您获取任何类型的信息,不仅是1和2

foreach (var item in query.OrderBy(x=>x.Cat).ThenBy(x=>x.Type))
{
     Console.WriteLine(string.Format("Cat:{0}  Type:{1}  CountForTypeAndCat:{2}", item.Cat, item.Type, item.CountForTypeAndCat));
}
© www.soinside.com 2019 - 2024. All rights reserved.