2013-08-14 2 views
0

У меня изначально было 2 списка для Keynotes and Tracks. Каждый из них был сгруппирован по дате через ключ. См. Ниже:Как выбрать Список в списке по ключу через LINQ

var Keynotes = _keynoteService.GetKeynotesForContentItem(trackPart.ContentItem).GroupBy(k => string.Format("{0}-{1}", k.Timeslot.DayOfYear, k.Timeslot.Year)); 
var Tracks = GetTracksForContentItem(trackPart.ContentItem); 

foreach (var track in Tracks) 
{ 
    var trackItem = new TrackItem(); 
    trackItem.Days = new List<TrackDay>(); 

    var trackDays = track.Sessions.GroupBy(s => string.Format("{0}-{1}", s.Timeslot.DayOfYear, s.Timeslot.Year)); 

    foreach(var trackDay in trackDays) 
    { 
      var trackKey = trackDay.Key //THIS IS THE KEY I NEED TO MATCH IN Keynotes 
      var trackKeynotes = Keynotes. //I'm Stuck here 

Новые списки теперь Keynotes и trackDays, которые на самом деле являются списками списков по ключам даты.

Как выбрать список в Keynotes, который соответствует определенному ключу из trackDays? У меня уже есть ключ, мне просто нужно знать, как правильно выбрать из Keynotes, чтобы получить правильный список.

Я не специалист по LINQ, поэтому мне нужна помощь.

Я думал Keynotes.Select или Keynotes.SingleOrDefault

Любая часть посоветуйте будет высоко оценен. Благодаря!

+2

Лучший способ, вероятно, к 'join' Keynotes и TrackDays на клавишах, которые являются общими. http://stackoverflow.com/q/3889741 –

ответ

1
var trackKeynotes = Keynotes.SingleOrDefault(g => g.Key == trackKey); 
+0

Он просит список, а не один элемент. –

+0

@RobertHarvey: на самом деле это список из-за 'GroupBy' –

+1

Это на самом деле правильный путь. Я упомянул, что после Group By они становятся списками в списках. Где, как было предложено многими, не выбирает базовый список, чтобы он не работал. – AnimaSola

0

Используйте Keynotes[trackKey], чтобы проиндексировать ваши группируемые предметы.

0

Попробуйте это вместо ::

var trackKeynotes = Keynotes.Where(K => K.Key == trackKey); 

Надеется, что это поможет !!

0

Может быть, это

var trackKeynotes = Keynotes.Where(x => x.Key == trackKey); 

Я предполагаю, что trackKey является ключом пометок.

1

Вы должны сделать это как этот

var result = (from x in Keynotes 
      join td in TrackDays on x.Key equals td.Key 
      select x).ToList(); 
+0

Во-первых, спасибо за это! Действительно ценю это. Однако в Keynotes и TrackDays есть разные объекты (объекты) с разными столбцами/свойствами. Не совсем уверен, что совместная работа будет работать, но я уже пробовал ответ Куонга. Спасибо! – AnimaSola