【问题标题】:LINQ: Order By Count of Unique Items in List<string>LINQ:按列表中唯一项的计数排序<string>
【发布时间】:2011-02-08 17:21:35
【问题描述】:

我有一个正确存储在 List 中的 id 列表。我现在需要对这个列表进行分组并计算按降序排列的出现次数。

例子:

List<string> aryIDs = new List<string>;
aryIDs.Add("1234");
aryIDs.Add("4321");
aryIDs.Add("3214");
aryIDs.Add("1234");
aryIDs.Add("4321");
aryIDs.Add("1234");

会产生:

"1234", 3
"4321", 2
"3214", 1

这在 TSQL 中很容易,但我想尽可能避免服务器往返、不必要的表等。

提前致谢。

更新:以下 Ralph Shillington 的答案的 VB.NET 转换:

Dim result = From id In aryIDs _
                     Group id By id Into Group _
                     Order By Group.Count() Descending _
                     Select id, Count = Group.Count()

result.Dump()

【问题讨论】:

  • 你提到T-SQL...你的意思是,所有这些数据都在数据库中?为什么不获取它已经分组和排序?还是我误会了什么?

标签: asp.net linq sorting count ienumerable


【解决方案1】:
List<string> aryIDs = new List<string>();
aryIDs.Add("1234");
aryIDs.Add("4321");
aryIDs.Add("3214");
aryIDs.Add("1234");
aryIDs.Add("4321");
aryIDs.Add("1234"); 

var result =     from id in aryIDs
group id by id into g
orderby g.Count() descending
select new { Id=g.Key, Count=g.Count() };

result.Dump();

将其剪切并粘贴到 LinqPad 中,您应该可以开始使用了。

也可以用 Lambda 表达式写成:

aryIDs.GroupBy (id => id).OrderByDescending (id => id.Count()).Select(g => new { Id=g.Key, Count=g.Count()}).Dump();

【讨论】:

  • 完美,谢谢。你甚至在我要求排序之前就更新了。 :)
  • @Ralph:这个查询语句相当于什么变成了 Lambda 表达式?
  • @santosh -- 我更新了答案以包含一个 Lambda 表达式。
  • @Ralph:非常感谢它运行良好。我已经投票给你了 :)
  • @Ralph VB.NET 转换的机会吗?我远远低估了这些差异。
【解决方案2】:

http://msdn.microsoft.com/en-us/vcsharp/aa336747#countGrouped怎么样:

List<Customer> customers = GetCustomerList();

var orderCounts =
    from c in customers
    select new { c.CustomerID, OrderCount = c.Orders.Count() };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-23
    • 2018-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-17
    相关资源
    最近更新 更多