2015-04-22 6 views
0

У меня есть данные о прослушивании музыки в течение более 8 лет, мне поручено находить самого слушавшего художника в конкретном году. Имя исполнителя должно быть возвращено в строку. Мне было предложено сделать это, используя одно заявление лямбда, и я потерян.Сортировка GroupBy вложенных списков Lambda

Вот что у меня есть. (где время является система DateTime оригинального прослушивания)

string mostPopular = musicDataList.Where(x => x.Time.Year.ToString() == year).GroupBy(y => y.Artist).OrderByDescending; 

Я поставил точку с запятой там, потому что я не знаю, что будет дальше.

Я знаю, что: мне нужно ограничить поиск по годам первый, я группа результата художника, так что я могу заказать результаты по сколько объектов в списке,

Что дон 't know: Синтаксис для сортировки вложенных списков, следующих за GroupBy, количеством объектов, найденных внутри, Как упорядочить количество объектов в каждом элементе списка, Затем извлечение свойства строки исполнителя из объекта.

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

Если у кого-то есть какие-либо данные о том, как прийти к решению, я был бы признателен, я просто не могу найти нужную информацию.

string mostPopular = musicDataList.Where(x => x.Time.Year.ToString() == year).GroupBy(y => y.Artist).OrderByDescending(z => z.Count()).First().Select(b => b.Artist).ToString(); 

Это мое мышление. Переустановите этот список только на год, который будет рассмотрен. Группируйте объекты по исполнителям, закажите список групп по .count вложенных списков, возьмите первый элемент, выберите свойство исполнителя и нажмите на строку.

Это не работает. Я не уверен, что здесь происходит не так, и я ничего не читаю в Интернете, помогая мне разобраться, как сортировать внутренний список объектов по тому, как много объектов есть во внутренних списках.

+0

После вашей группы у вас будет имя исполнителя в качестве ключа, указывающего на коллекцию записей. Заказывайте по длине этой коллекции. Im на моем телефоне, но псевдокод будет musicDataList.Where (x => x.Time.Year.ToString() == year) .GroupBy (y => y.Artist) .OrderByDescending (x => x.Group.Count()). Группа будет собирать все, что составляет musicDataList. Я не знаю, для чего вызывается точное свойство, чтобы получить Группировку. – arjabbar

+0

Я не знаю, что есть. Мой список построен прямо из цикла, который разбивает текстовый файл информации. Список является объектом класса «Воспроизвести» с названием, исполнителем, временем и альбомом в качестве свойств. Он удаляет данные из текстового файла в этом порядке. Итак, у меня есть список, содержащий эту строку данных, затем я перебираю несколько строк в виде списка в новый список.Поэтому я не уверен, что имя группы будет И как только это будет сделано, мне нужно получить имя исполнителя из этого вложенного списка. Кто-нибудь глубоко погружается в работу манипулирования вложенными списками? –

ответ

0
string difficult = musicDataList.Where(x => x.Time.Year.ToString() == year).GroupBy(y => y.Artist).OrderByDescending(z => z.Count()).First().First().Artist; 

Это закончилось работой. Выбор первого элемента первого элемента (.First(). First()) работал после сортировки по .count.

Кто-нибудь знает, есть ли более эффективный способ формулировки?

Также любое хорошее чтение вложенных списков и доступ к свойствам определенных объектов, вложенных в список, было бы замечательным.