2011-03-13 7 views
3

아래 쿼리에서 datetime 열의 시간 부분을 제거하여 고유 날짜 만 가져 오는 방법은 무엇입니까? 나도 몰라 (linq 쿼리 고유 날짜

var q = ctx.Table.Select(r => r.datetimefield.Date).Distinct(); 
+0

이 질문, 당신은 EntityFunctions.TruncateTime http://stackoverflow.com/questions/11524853/distinct-date-with-linq를 사용하는 것이 정답하고자했다 –

답변

10

당신은 LINQ - 투 - SQL 또는 EF와 오류를 통해 걸림돌됩니다 r.datetimefield 가정

using (var ctx = new DBConn()) 
{ 
    var q = ctx.Table.Select(r => r.datetimefield).Distinct(); 
} 
+0

r.datetimefield.Value.Date를 추가하면 작동합니다. – user285677

+0

네,'datetimefield'가'Nullable '이면'Value'가 필요합니다. 그러나 쿼리를 메모리로 밀어 넣으면 광범위한 쿼리를 수행하는 데 오랜 시간이 걸릴 수 있습니다. 당신은 포인트 2로 봐야한다, 그것은 당신에게 장기적으로 많은 두통을 저장합니다. – Femaref

+0

사실, 그것을 할 수있는 방법이 있습니다,이 답변을 참조하십시오 : http://stackoverflow.com/a/11525054/68818 –

3

는 시간 구성 요소를 제거합니다 DateTime.Date를 사용할 수 날짜 시간입니다 어느 쪽을 사용하고 있는지). 똑 바른 해결책은 DateTime.Date 속성을 사용하는 것이지만, 두 ORM 모두에서 지원되지 않으며 SQL 메서드에 매핑되지 않습니다. 쿼리의

  1. 열망 평가 ToList를 사용하여 :

    var q = ctx.Table.ToList().Select(r => r.datetimefield.Date).Distinct(); 
    
  2. 데이터베이스에서 날짜 만 구성 요소를 자세히 설명하는 필드를 만들

    두 가지 솔루션을 가지고있다. 이것은 데이터베이스에 머물면서 쿼리를 실행할 수있는 평소대로가는 길입니다.

+0

당신이하지, 적어도와 수 linq-to-sql 또는 EF는 'Date'속성으로 SQL 메서드에 매핑되지 않습니다. – Femaref

+0

date 속성은 value.date를 통해 사용할 수 있지만 "지정된 형식 멤버 'Date'가 LINQ to Entities에서 지원되지 않습니다." – user285677

+0

예, 그게 내가 암시하는 것입니다. EF는 SQL 메소드에 맵핑하지 않으므로 쿼리에서 'Date' 특성을 사용할 수 없습니다. 나는 개인적으로 거대한 실수로 간주합니다. – Femaref