2014-01-30 2 views
0

날짜 만 비교하려고합니다. 표의 값은 2014-01-29 09 : 00 : 00.000 형식의 DateTime입니다. 당신에게Linq 2 날짜 비교

public static List<vwReportDate> GetDetail(string startDate, string endDate) 
{ 
    startDate = "2014-01-28"; 
    endDate = "2014-01-28"; 

    DateTime dtStart = Convert.ToDateTime(startDate); 
    DateTime dtEndDate = Convert.ToDateTime(endDate); 


    var entities = new DataEntiies(); 
    var query = from c in entities.vwReportDate 
       where c.EventCreateDate >= dtStart && c.EventCreateDate <= dtEndDate 
       select c; 
    return query.ToList(); 

} 
+1

'Date' 속성을 사용하십시오. – Styxxy

+0

나는 당신이 당신이 테이블을 질의한다는 것을 암시했다. 어떤 ORM 도구를 사용하고 있습니까? 엔티티 프레임 워크? 이 점을 반영하여 질문의 태그를 업데이트 해 주시겠습니까? – Sam

+0

"DateTime with format [...]"- 그런 건 없습니다. DateTime은 단지 값일뿐입니다. 그것은 원래 형식을 가지고 있지 않습니다. –

답변

3

Entity Framework 및 LINQ to EF를 사용하는 것 같습니다. 그렇다면 DateTime.Date 속성 because it's not supported을 LINQ to EF에 사용할 수 없습니다. 대신 EntityFunctions.TruncateTime(myDateTime) 정적 방법을 사용해야합니다 :

var query = from c in entities.vwReportDate 
      let eventDate = EntityFunctions.TruncateTime(c.EventCreateDate) 
      where eventDate >= dtStart && eventDate <= dtEndDate 
      select c; 
0

사용 "날짜"부분을 검색하는 DateTime 구조체의 Date 속성을 감사 알려 주시기 바랍니다.

이 인스턴스의 날짜 구성 요소를 가져옵니다. 코드에서

사용을 :

var query = from c in entities.vwReportDate 
      where c.EventCreateDate.Date >= dtStart && c.EventCreateDate.Date <= dtEndDate 
      select c; 

당신이 (당신이 할 것처럼 보이는), 당신은 EntityFunctions.TruncateTime (도우미) 메소드를 사용해야합니다 엔티티 프레임 워크를 사용하는 경우, 그렇지 않으면 쿼리 때문에 변환 할 수 없습니다.

var query = from c in entities.vwReportDate 
      where EntityFunctions.TruncateTime(c.EventCreateDate) >= dtStart && EntityFunctions.TruncateTime(c.EventCreateDate) <= dtEndDate 
      select c; 
2

EF에 의존하지 않는이 문제에 대한 나의 접근 방식은의 끝을 이동 한 후 (날짜 범위의 끝은 "보다 작"를 사용하는 것입니다 날짜 범위 전날) :

startDate = "2014-01-28"; 
endDate = "2014-01-28"; 

DateTime dtStart = Convert.ToDateTime(startDate); 
DateTime dtEndDate = Convert.ToDateTime(endDate).AddDays(1); 


var entities = new DataEntiies(); 
var query = from c in entities.vwReportDate 
      where c.EventCreateDate >= dtStart && c.EventCreateDate < dtEndDate 
      select c; 
return query.ToList(); 

질문 : 메소드의 호출자가 제공 한 인수 값을 무시하는 이유는 무엇입니까?

+0

끝 날짜와 동일한 * 값을 쿼리에 포함 시키려면 어떻게해야합니까? 쿼리는 원하는 동작임을 나타냅니다. 나는 이것이 기능상으로 동등하다고 생각하지 않는다. – Sam

+0

@ Sam : 종료일에 하나를 추가했음을 유의하십시오. 사용자가 2013-01-01부터 2013-12-31까지의 기간을 입력하면 OP 기준에 데이터베이스 값의 시간을 잘라서 2013-12-31 01:00:00과 같은 날짜/시간 값이 포함됩니다. 내 접근 방식은 범위 끝 값에 1을 더하고 연산자를 '<='에서 '<'로 변경하므로 1 A.M. 값. 진정으로 동등하려면 두 방법 모두 범위 값을 잘라야 할 것입니다. 그러나이 예에서 명백히 날짜 전용 상수이므로이 값을 생략했습니다. 그러나 왜 방법 매개 변수에 대해 물었습니다. – phoog

+0

죄송합니다; 네가 옳다는 것을 알 수있다. 나는 단지 'AddDays' 비트를 발견하지 못했습니다. 왜냐하면 당신이 변경 한 내용 만 변경했기 때문에 비교 연산자를 변경했을 때 그 변경 자체가 잘못되었을 것입니다. – Sam