2013-08-14 3 views
0

필자는 원래 Keynote and Tracks 목록 2 개를 보유하고 있습니다. 그런 다음 각각은 키를 통해 날짜별로 그룹화됩니다. 아래를 참조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 

새로운 목록 지금 실제로 날짜 키로리스트의 목록입니다 기조 연설 및 trackDays 있습니다.

키 노트에서 trackDays의 특정 키와 일치하는 목록을 어떻게 선택합니까? 키가 이미 있습니다. 올바른 목록을 얻으려면 Keynotes를 올바르게 선택하는 방법을 알아야합니다.

저는 LINQ 전문가가 아니므로 도움이 필요합니다. 내가 Keynotes.Select 또는 Keynotes.SingleOrDefault

조언의 어떤 부분이 높게 평가 될 것이라고 생각했다

. 감사!

+2

가장 좋은 방법은 같이해야는 아마에 '공통의 키에 join' 키 노트 및 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는 항목/엔티티가 다른 항목 (엔티티)을 가지고 있습니다. 그것들을 함께 결합해도 작동할지는 모르겠지만 이미 Cuong의 대답을 시도했습니다. 고맙습니다! – AnimaSola