2014-01-22 142 views
0

夥計們!LINQ:查找列表中包含項目清單中的項目

我有一個小問題LINQ(我總是在這個主題beginer)。也許這是一些設計錯誤,但讓你決定。 我正在編碼一個Windows應用商店應用,這是一種日曆。它有一個對象。由於語義縮放(和一些分組攻擊),我將這一天放入一個包裝類,名爲

加載所有數據後,獲取當前數據後,我想從此結構中提取當前Day對象。 這裏是重要的代碼:

public class Day 
{ 
    public int nr { get; set; } 
    ... 
} 
public class Month 
{ 
    public string Title {get;set;} 
    public List<Day> Days{get;set;} 
} 

後來我有這樣的:

List<Month> Months; 

它是正確充滿天的名單。現在到了棘手的部分:

Day Today = Months.Find(???) 

我有一些想法,但他們都不是statisfying ...

所以,問題是:

我怎樣才能從選擇項目LINQ中有多個列表層次結構?

(List<List<Day>>, and one condition must met in each list (Day.nr and Month.nr)) 

回答

1

每個月創建一個枚舉:

public enum NamesOfMonths 
{ 
    January = 1, 
    February = 2, 
    // so on and so forth 
} 

現在,你可以用它來尋找正確的月份,並最終成爲正確的一天。

var dayToday = DateTime.Now.Day; 
var monthToday = DateTime.Now.Month; 

Day Today = Months.Find(m => m.Title.Equals(((NamesOfMonths)monthToday).ToString())) 
    .Days.Where(d => d.Nr == dayToday).FirstOrDefault(); 
+0

謝謝,這是正確的! –

0

我認爲你正在尋找SelectMany

var days = months.SelectMany(m => m.Days); // Gets all the days in those months 
var today = days.Where(d => /* some condition goes here */); 
+0

不完全是。我只尋找一天。而這一天的nr並不是一個普遍的id,所以每個月有1天,2天等。但是,如果您可以指定如何在第一行中僅選擇一個月,則解決了我的問題。 :) –

+0

而且'var today'的類型是真實的,IEnum。 –