GroupBy, а затем заказать другой список на основе группы в C # - PullRequest
2 голосов
/ 29 февраля 2012

У меня есть один 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 голосами сохраняютсяих сортировка по дате.

1 Ответ

3 голосов
/ 29 февраля 2012

Звучит так, будто вы хотите что-то вроде:

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

(я могу поместить это в нотацию без выражения запроса, если хотите, но это будет не так аккуратно).

...