C#linq分组同名

时间:2012-10-15 06:36:35

标签: c# linq datatable

我有一个像

这样的数据表
Date      status       recno
---------------------------------
2012      DST;Par        1
------------------------------------
2012      DST            2
--------------------------------
2012      DST            3
--------------------------------------------
2012      DST;Ts         4
-----------------------------------

目前我写了一个这样的查询:

var data = from b in table.AsEnumerable()
           where b.DateInterval>=fromDate && b.DateInterval<=toDate
           group b by b.Channel1_status into g                       
           select new
           {
               AccountNo=accountNumber,
               Status = statusLabels[g.Key].ToString(),
               StatusCount = g.Count(),
           };

但是,它会让我得到这些结果:

Result: DST-2 
        DST;par-1 and DST;Ts-1

Expected: DST-4  DST;par-1 and DST;Ts-1

请向我解释我的错误以及如何获得预期结果。

1 个答案:

答案 0 :(得分:1)

如果您想要以DST开头的状态计算所有状态并仍然对变体进行分组(DST; par,DST; ts),您可以手动执行此操作。

这样的事情(未经测试,但我认为你明白了):

var dst = data.FirstOrDefault(x => x.Status == "DST");
if (dst != null) {
    foreach (var group in data.Where(x => x != dst && x.Status.StartsWith("DST")) {
        dst.StatusCount += group.StatusCount;
    }
}