如何通过LINQ按键选择列表中的列表

时间:2013-08-14 16:47:24

标签: c# linq list

我最初有2个Keynotes和Tracks列表。然后通过密钥将每个分组按日期分组。见下文:

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

任何建议都将受到高度赞赏。谢谢!

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

你应该这样做

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

答案 2 :(得分:0)

使用Keynotes[trackKey]为您的分组项目编制索引。

答案 3 :(得分:0)

试试这个::

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

希望这会有所帮助!!

答案 4 :(得分:0)

也许这个

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

我认为trackKey是Keynotes的关键。