0

根据起诉书和预订号码的复合键,我有 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

4

4 回答 4

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
    };

或者

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());
于 2010-12-20T23:08:56.250 回答
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());
}
于 2010-12-20T23:14:19.700 回答
0

如果您在 Linq 中使用Grouping 运算符,您将获得所需的内容。编码:

  var count = from a in divAssignments
              group a by new { a.rNI, a.Booking } into b
              select b;

将返回IGrouping对象的集合。这将为您提供密钥(在我的示例中,这将是具有 rNI 和 Booking 属性的匿名类型)和与密钥匹配的 divAssignments 的集合。

于 2010-12-20T23:18:54.837 回答
0

使用方法语法(我认为更容易阅读):

首先对记录进行分组,然后为每个包含计数的组选择一个新结果。

var groups = divAssignments.GroupBy(d => new { d.rNI, d.Booking });
groups.Select(g=> new { g.Key.rNI, g.Key.Booking, IndictmentCount = g.Count() });
于 2010-12-21T00:10:01.980 回答