C#linq同名分组
我有一个像这样的数据表C#linq同名分组,c#,linq,datatable,C#,Linq,Datatable,我有一个像这样的数据表 Date status recno --------------------------------- 2012 DST;Par 1 ------------------------------------ 2012 DST 2 -------------------------------- 2012 DST 3 ------------------------
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(),
};
请解释我做错了什么,以及如何得到预期的结果。 < P>如果你想以DST开头的所有状态,并仍然分组变化(DST;PAR,DST;TS),你可以手动完成。p> 类似这样的东西(未经测试,但我想你已经明白了):
我怀疑您的表没有您认为它拥有的信息,或者您正在使用一个更复杂的查询,它使用连接或类似的东西。您期望的结果是什么?这不是复杂的查询,只是对列通道状态进行分组并获得结果,正如我在下面解释的那样。但问题是我必须得到我上面所期望的结果。你得到的结果在我看来是正确的。它按状态分组,您只有两行状态为“DST”。@CuongLe请查看我在上面发布的预期结果,以及我现在得到的实际结果。这表明这里的“除(DST)”有一些无效信息arguments@nag是的,我认为这可能不会立即奏效,因为这只是一个让人理解这个想法的例子。但是,我编辑了代码示例,因此错误应该消失。@nag这是因为使用的类型是匿名类型。如果您创建自己的类持有相同的三个属性,您可以使它们可写。如果我们转换为数据表,会怎么样,因为我已经转换为数据表了。
Result: DST-2
DST;par-1 and DST;Ts-1
Expected: DST-4 DST;par-1 and DST;Ts-1
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;
}
}