2010-10-01 84 views
1

我很難表達這個問題,所以請耐心等待,隨時提出後續問題。如何根據表達式<T, K>的結果將列表<K>按列表<T>分組?

我有一個時期的對象和功能的其他地方看起來像這樣:

public static bool PeriodApplies(Period period, DateTime date) 

這個函數描述的重複週期(想想時間表移動或移動電話計費計劃期間,即對象,「白天」,「星期一從下午5點到凌晨12:00」)和日期。如果日期在期限內,則返回true。

現在,我有List<Period>List<Interval>Date屬性。我怎樣才能輸出A Dictionary<Period, <Ienumerable<Interval>>(或其他一些Period類型的密鑰和值爲Interval s的列表中的其他數據結構)PeriodApplies返回true時通過IntervalDate屬性和密鑰Period

我覺得Linq很適合這類問題,但我無法弄清楚如何做到這一點。任何幫助?

回答

2

像這樣:

IDictionary<Period, IEnumerable<Interval>> dictionary = 
    periods.ToDictionary(p => p, 
          p => intervals.Where(i => PeriodApplies(p, i.Date))); 

第一部分描述了密鑰,第二部分確定的值。

+1

我喜歡這個答案,因爲它允許我創建一個帶參數謂詞的泛型函數! – 2010-10-01 13:10:45

3

如何使用ToLookup

var query = (from period in periods 
      from interval in intervals 
      where PeriodApplies(period, interval) 
      select new { period, interval }) 
      .ToLookup(x => x.period, x => x.interval);