c# - GroupBy,然后根据 C# 中的组对另一个列表进行排序

标签 c# linq sql-order-by

我有一个List对象,看起来像这样

class Item
{
    int ItemId;
    string Name;
    DateTime CreatedDate;
    ... more properties, but not relevant ...
}

还有一个持有选票的

class Vote
{
    int ItemId;
    ... more properties, but not relevant ...
}

所以投票指向一个项目。我从数据库中收集了所有投票,并将它们存储在列表中

var votes = GetAllVotes().ToLookup(v => v.ItemId).OrderByDescending(v => v.Count());

现在我有一个列表,它为我提供了良好列表中得票最多的 itemId。有没有办法让我根据投票列表对项目列表进行排序?

var items = GetAllItems().OrderBy(i => i.CreatedDate);
//then I want to do something like this:
items.OrderBy(votes.Select(v => v.Key, v.Count())

因此,这里的目标是按投票数对项目进行排序,并且所有投票数为 0 的项目保持按日期排序。

最佳答案

听起来你想要类似的东西:

from item in GetAllItems()
join vote in GetAllVotes() on item.ItemId equals vote.VoteId into votes
orderby votes.Count() descending, item.CreatedDate
select new { Item = item, Votes = votes.Count() };

(如果您愿意,我可以将其放在非查询表达式表示法中,但它不会那么整洁。)

关于c# - GroupBy,然后根据 C# 中的组对另一个列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9495997/

相关文章:

sql-order-by - 如何在《教义2》中按数排序?

Django:按位置排序忽略 NULL

c# - ASP.NET Web-Api 在本地工作但在 IIS7 上部署后不工作

c# - 单击按钮时从资源中随机播放图片

c# - 是否可以使用 C# 交互模式?

linq - 如何使用 StorageClient 从 Azure 表中选择 50 到 100 行?

c# - 将 linq to objects 查询结果放入类型字典中

c# - 通过 linq to xml 中的属性获取 Node

c# - 删除和创建新的/覆盖同名的文件 c# .NET

mysql - 如何在 SQL 中选择最接近的值,但只有当该值更大时?