2010-03-05 154 views
3

我有一個自定義對象列表。這些對象有2個日期時間屬性。我需要從兩個對象屬性中獲取唯一的(忽略時間部分)datetime對象。使用LINQ過濾對象列表

我有2米的物體2的日期時間屬性:

object1.date1 = "01/01/2001 12:54" 
object2.date1 = "01/02/2001 12:51" 
object3.date1 = "01/01/2001 23:45" 
object4.date1 = "01/02/2001 12:54" 
object5.date1 = "01/01/2001 18:22" 

object1.date2 = "09/01/2001 15:54" 
object2.date2 = "09/02/2001 18:51" 
object3.date2 = "08/01/2001 21:45" 
object4.date2 = "08/02/2001 02:54" 
object5.date2 = "07/01/2001 05:22" 

這些被存儲在列表:

List<MyObject>() objList = new List<MyObject>() 
objList.add(object1); 
objList.add(object2); 

我需要在objList執行一些LINQ到產生一個包含以下日期時間對象的新List:

01/01/2001 00:00 
01/02/2001 00:00 
09/01/2001 00:00 
09/02/2001 00:00 
08/01/2001 00:00 
08/02/2001 00:00 
07/01/2001 00:00 

回答

11

這聽起來像你想要的東西,如:

var newList = objList.Select(x => x.date1.Date) 
        .Concat(objList.Select(x => x.date2.Date)) 
        .Distinct() 
        .ToList(); 

確實看起來約你的權利?

+3

@Obalix - 在樣例輸出中我看不到任何重複內容... – cjk 2010-03-05 08:28:28

2
var dates = objects 
    .SelectMany(o => new[] { o.date1, o.date2 }) 
    .Select(d => DateTime.Parse(d).Date) 
    .Distinct(); 

您可以使用Concat和Jon建議或SelectMany(這看起來更自然的我)。

當然,理想情況是將日期解析邏輯封裝到MyObject類中,並公開DateTime屬性而不是普通字符串。