2012-09-25 74 views
0

下面是I類有:獲取所有的獨特變化

public class Schedule 
{ 
    public string mintime { get; set; } 
    public string maxtime { get; set; } 
    public string weekday { get; set; } 
} 

我有這樣的任務,而且重複工作日列表像

List<Schedule> list = new List<Schedule> { 
    new Schedule { mintime = "01.01.2012", maxtime = "05.01.2012", weekday = "1" }, 
    new Schedule { mintime = "05.01.2012", maxtime = "10.01.2012", weekday = "1" }, 
    new Schedule { mintime = "10.01.2012", maxtime = "20.01.2012", weekday = "2" }, 
    new Schedule { mintime = "01.02.2012", maxtime = "10.02.2012", weekday = "2" }, 
    new Schedule { mintime = "01.03.2012", maxtime = "10.03.2012", weekday = "3" }, 
    new Schedule { mintime = "01.04.2012", maxtime = "10.04.2012", weekday = "4" } 
}; 

我怎樣才能名單>中包含的所有組合:

List<List<Schedule>> list = new List<List<Schedule>> { 
    new List<Schedule> { 
     new Schedule { mintime = "01.01.2012", maxtime = "05.01.2012", weekday = "1" }, 
     new Schedule { mintime = "10.01.2012", maxtime = "20.01.2012", weekday = "2" }, 
     new Schedule { mintime = "01.03.2012", maxtime = "10.03.2012", weekday = "3" }, 
     new Schedule { mintime = "01.04.2012", maxtime = "10.04.2012", weekday = "4" } 
    }, 
    new List<Schedule> { 
     new Schedule { mintime = "01.01.2012", maxtime = "05.01.2012", weekday = "1" }, 
     new Schedule { mintime = "01.02.2012", maxtime = "10.02.2012", weekday = "2" }, 
     new Schedule { mintime = "01.03.2012", maxtime = "10.03.2012", weekday = "3" }, 
     new Schedule { mintime = "01.04.2012", maxtime = "10.04.2012", weekday = "4" } 
    }, 
    new List<Schedule> { 
     new Schedule { mintime = "05.01.2012", maxtime = "10.01.2012", weekday = "1" }, 
     new Schedule { mintime = "10.01.2012", maxtime = "20.01.2012", weekday = "2" }, 
     new Schedule { mintime = "01.03.2012", maxtime = "10.03.2012", weekday = "3" }, 
     new Schedule { mintime = "01.04.2012", maxtime = "10.04.2012", weekday = "4" } 
    }, 
    new List<Schedule> { 
     new Schedule { mintime = "05.01.2012", maxtime = "10.01.2012", weekday = "1" }, 
     new Schedule { mintime = "01.02.2012", maxtime = "10.02.2012", weekday = "2" }, 
     new Schedule { mintime = "01.03.2012", maxtime = "10.03.2012", weekday = "3" }, 
     new Schedule { mintime = "01.04.2012", maxtime = "10.04.2012", weekday = "4" } 
    }, 
}; 

是否有可能使用LINQ獲取它?


我的問題的主要議題是建立時間表清單。每個時間表應包括星期一,星期二,星期三,星期四,星期五,星期六和星期日一次。 我需要使用一個更常見的列表來構建這樣的列表,其中包含許多針對星期一,星期三等的時間表。

+1

你能不能精確你的問題?非常不清楚。 – Cybermaxs

+0

你爲什麼用字符串表示日期?這會讓你很難幫助你。 –

+0

@Cyber​​maxs對不起,我的英語。試圖改善問題。請參閱問題更新。 – kseen

回答

2

使用Eric LippertCartesianProduct here

List<List<Schedule>> newList = CartesianProduct(list.GroupBy(l => l.weekday)) 
           .Select(x => x.ToList()) 
           .ToList(); 

-

​​
+0

非常酷。順便說一句,如果它是擴展方法,正確的順序應該是:'list.GroupBy(l => l.weekday).CartesianProduct()。選擇(x => x.ToList())。ToList();'由於鏈接有時會變壞,你可以在這篇文章中包含該方法的代碼嗎? –

+0

@BradRem我知道但不是將代碼移動到一個靜態類,我只是刪除'this'來測試我的環境。 –