我有一个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票的项目按日期排序。
答案 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() };
(如果你愿意,我可以把它放在非查询表达式表示法中,但它不会那么整洁。)