LINQ:基于另一个列值选择一个列

时间:2018-09-17 13:53:24

标签: c# sql sql-server linq

执行一些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

现在,对于每只猫,我都希望使用LINQ根据类型值选择计数。

输出应如下所示:

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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));
}