【问题标题】:Grouping records using LINQ method syntax使用 LINQ 方法语法对记录进行分组
【发布时间】:2012-09-20 11:39:40
【问题描述】:

我正在尝试使用 LINQ 方法语法按日期(不考虑时间)对记录进行分组,但只选择每条记录的一个实例(即模型中的 ItemId)

我的简单查询如下:

range1.Count(x => ((x.OpenedDate >= todayFirst) && (x.OpenedDate <= todayLast))

我如何计算ItemId这个范围内的唯一记录?

【问题讨论】:

  • 请停止使用asp.net-mvc标签标记与ASP.NET MVC无关的问题。

标签: c# linq entity-framework


【解决方案1】:

听起来像你想要的:

var query = range1.Where(x.OpenedDate >= todayFirst && x.OpenedDate <= todayLast)
                  .GroupBy(x => x.ItemId)
                  .Select(g => new { ItemId = g.Key, Count = g.Count() });

foreach (var result in query)
{
    Console.WriteLine("{0} - {1}", result.ItemId, result.Count);
}

我可能没有真正理解你的意思——不清楚你是否真的想按日期或项目 ID 分组

编辑:如果您只想要该范围内不同项目 ID 的计数,您可以使用:

var count = range1.Where(x.OpenedDate >= todayFirst && x.OpenedDate <= todayLast)
                  .Select(x => x.ItemId)
                  .Distinct()
                  .Count();

【讨论】:

  • 谢谢乔恩。如何访问查询的整数“计数”值?我正在查找 todayFirst 和 todayLast 日期之间具有唯一 ItemId 值的所有记录的数量。
  • @Nick:我已经编辑了答案以显示对结果的迭代。
  • @Nick:好的,我想我误解了这个问题 - 只需使用 query.Count() 即可为您提供答案,但有一个更简单的方法......编辑它。
猜你喜欢
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多