C# 获取列表中最常见的项目<;T>;然后再分类
我有一个对象/类的C# 获取列表中最常见的项目<;T>;然后再分类,c#,sql,.net,linq,C#,Sql,.net,Linq,我有一个对象/类的列表,该对象/类已经填充了来自SQL数据库的数据。我想做的是找出这个表中最常见的用户是谁,并根据最常见的用户对新列表进行排序 我不知道如何在Stackoverflow上设计一张桌子,所以你得忍受我 例如,数据库表可以如下所示: id - userID - randomColumn - randomColumn2 1 - 2 - ExampleText - ExampleText 2 - 2 - ExampleText - ExampleText 3 - 1 - ExampleT
列表
,该对象/类已经填充了来自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
使用LINQ提供的
GroupBy
扩展方法
// Pseudo code
var grouped = list.GroupBy(item => item.UserID);
然后,您可以调用OrderByDescending
对结果进行排序:
var sorted = grouped.OrderByDescending(group => group.Count());
您需要按
userID
对项目进行分组。然后,通过选择分组键、组中项目的计数和组中第一个项目的随机列的值,将每个组投影到匿名类型(或某些特定类型,如果您有)中。最后一步是按项目组的items count属性排序结果:
var query = list.GroupBy(u => u.userID)
.Select(g => new {
userID = g.Key,
amountColumn = g.Count(),
randomColumn = g.First().randomColumn
}).OrderByDescending(x => x.amountColumn);
使用linq中的
GroupBy
方法按用户分组,然后按用户数排序,然后选择已排序的项目
var grouped = list.GroupBy(g => g.UserID)
.OrderByDescending(g => g.Count)
.Select(g => g);
如评论中所述,这将返回组列表。要将它们放入一个“平面”列表,您可以使用SelectMany
:
var items = grouped.SelectMany(g => g);
项目将成为单个用户列表。您需要以下功能:
users.GroupBy(n => n.userID)
.Select(n => new {userID = n.Key, amountColumn = n.Count()})
.OrderByDescending(n => n.amountColumn);
SQL将是:
SELECT userID, Count(UserID) AS Total , randomColumn
FROM YourTable
GROUP BY userID,randomColumn
ORDER BY Total
你试过了吗?你还需要一个OrderBy
调用afterwords。你应该使用组的Key
属性来访问键,而不是组中第一项的值。为什么Select(g=>g)
?不知道为什么会有这么多的向上投票,但这将返回groups@SergeyBerezovskiy这应该是好的;鉴于我们不知道他到底想要什么,OP可以简单地操纵它,使之精确到他想要的。他不知道怎么做的部分已经完成了,这足以得到一个好的答案。@Servy有争议。很有争议。然后答案是-useEnumerable.GroupBy
。OP可以使用适当的列并进行操作results@SergeyBerezovskiy当然你听起来好像觉得那很荒谬。这就是OP真正需要听到的所有内容。这不起作用。除非结果是子查询的一部分,否则不能按聚合函数排序或分组。除非sql更改了我没有的规范,否则不太可能。@IrfanTahirKheli我已经尝试过了,效果很好。但是,如果我想在中添加另一个使用该用户ID的表,比如用户表,您会怎么做呢。@HenrikP:。。检查这个。。希望这就是您要查找的内容。@HenrikP:您可以选择任何列,您需要在Group By子句中包含您选择的所有列。