我有一个List<T>
的对象/类,它已经填充了SQL数据库中的数据。我想要做的是找出这个表中最常见的用户是谁,并根据最常见的用户开始对新列表进行排序
我不知道如何在Stackoverflow上设置表格样式,所以你必须忍受我。
数据库表可以是这样的:
id - userID - randomColumn - randomColumn2
1 - 2 - ExampleText - ExampleText
2 - 2 - ExampleText - ExampleText
3 - 1 - ExampleText - ExampleText
4 - 3 - ExampleText - ExampleText
5 - 2 - ExampleText - ExampleText
6 - 1 - ExampleText - ExampleText
我想使用LINQ或SQL来格式化这个,所以我得到一个看起来像这样的列表
userID - amountColumn - randomColumn
2 - 3 - ExampleText
1 - 2 - ExampleText
3 - 1 - ExampleText
答案 0 :(得分:4)
使用LINQ提供的GroupBy
扩展方法。
// Pseudo code
var grouped = list.GroupBy(item => item.UserID);
然后,您可以致电OrderByDescending
对结果进行排序:
var sorted = grouped.OrderByDescending(group => group.Count());
答案 1 :(得分:4)
使用linq中的GroupBy
方法按用户分组,然后按用户数排序,然后选择已订购的项目。
var grouped = list.GroupBy(g => g.UserID)
.OrderByDescending(g => g.Count)
.Select(g => g);
如评论中所述,这将返回一个组列表。要将这些列入一个“平面”列表,您可以使用SelectMany
:
var items = grouped.SelectMany(g => g);
items
将成为单个用户列表。
答案 2 :(得分:2)
您需要按userID
对项目进行分组。然后通过选择分组键,组中的项目数和组中第一项的随机列的值,将每个组投影到匿名类型(或某些特定类型,如果有的话)。最后一步是按投影组的项目计数属性排序结果:
var query = list.GroupBy(u => u.userID)
.Select(g => new {
userID = g.Key,
amountColumn = g.Count(),
randomColumn = g.First().randomColumn
}).OrderByDescending(x => x.amountColumn);
答案 3 :(得分:2)
您需要GroupBy功能:
users.GroupBy(n => n.userID)
.Select(n => new {userID = n.Key, amountColumn = n.Count()})
.OrderByDescending(n => n.amountColumn);
答案 4 :(得分:0)
SQL将是:
SELECT userID, Count(UserID) AS Total , randomColumn
FROM YourTable
GROUP BY userID,randomColumn
ORDER BY Total