2010-03-05 3 views
3

사용자 지정 개체 목록이 있습니다. 이러한 개체에는 2 개의 datetime 속성이 있습니다. 두 개체 속성에서 고유 한 (시간 부분 무시) datetime 개체 목록을 가져와야합니다.LINQ를 사용하여 개체 목록 필터링

나는이 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를 수행 할 필요를 다음과 같은 datetime 객체를 포함하는 새 List를 생성합니다.

,451,515,
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

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

당신은 Concat를 사용할 수 있습니다 및 존 (나에게 더 자연스럽게 보이는) 제안 또는 SelectMany.

당연히 이상적인 것은 날짜 구문 분석 논리를 MyObject 클래스로 캡슐화하고 일반 문자열이 아닌 DateTime 속성을 노출하는 것입니다.

관련 문제