GroupBy,然后根据C#中的组排序另一个列表

时间:2012-02-29 08:48:48

标签: 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 ...
}

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

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票的项目按日期排序。

1 个答案:

答案 0 :(得分:3)

听起来你想要这样的东西:

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() };

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