根据起诉书和预订号码的复合键,我有divAssignments有rNI潜在的多行,一个官方ID。
rNI Booking Indictment
12345 954445 10 12345
12345 954445 10 12346
12345 954445 10 12347
因此,对于此rni的单个预订号,ID的计数为3。
我想通过预订号码
来尝试生成一个计数和一组人var moreThen = from dA in divAssignments
select new { dA.rNI, IndictmentCount = dA.indictmentNumber.Count() };
大多数示例都处理静态int [],在我的情况下似乎不起作用。
如何获得一个小组然后计算?如果我可以投入一个太棒了。
来自t-sql POV我会用这个:
Select rni, bookingNumber, count(*) IndictmentCount
from divAssignments
group by rni, bookingNumber
having count(*) > 0
TIA
答案 0 :(得分:1)
这样的事情怎么样:
var query = from item in divAssignments
group item by item.rNI into grouping
select new
{
Id = grouping.Key,
Count = grouping.Count()
}
如果您对通过rNI和预订编号进行分组感兴趣,我会将其更改为:
var query = from item in divAssignements
group item by new { item.rNI, a.Booking } into grouping
select new
{
Id = grouping.Key,
Count = grouping.Count
};
OR
var query = from item in divAssignments
group item by item into grouping
select new
{
Id = grouping.Key,
Count = grouping.Count()
}
并在divAssignment对象上实现IEquatable以支持相等性比较。如果您愿意,另一个选项是编写IEqualityComparer实例来进行复合键比较。您的查询可能如下所示:
var query =
divAssignments
.GroupBy(i => i, new MyCustomEqualityComparer())
.Select(i => new { Key = i.Key, Count = i.Count());
答案 1 :(得分:0)
var query =
from dA in divAssignments
group dA by new { dA.rNI, dA.bookingNumber };
foreach(var grp in query)
{
Console.WriteLine("rNI={0}, bookingNumber={1} => Count={2}", grp.Key.rNI, grp.Key.bookingNumber, grp.Count());
}
答案 2 :(得分:0)
如果您在Linq中使用Grouping operator,您将获得所需。代码:
var count = from a in divAssignments
group a by new { a.rNI, a.Booking } into b
select b;
将返回IGrouping个对象的集合。这将为您提供密钥(在我的示例中,这将是一个带有rNI和Booking属性的匿名类型)以及与密钥匹配的divAssignments集合。
答案 3 :(得分:0)
使用Method语法(在我看来更容易阅读):
首先对记录进行分组,然后为包含计数的每个组选择一个新结果。
var groups = divAssignments.GroupBy(d => new { d.rNI, d.Booking });
groups.Select(g=> new { g.Key.rNI, g.Key.Booking, IndictmentCount = g.Count() });