2

중간에 복잡한 검색을 위해 동적 linq를 사용하여 where 절을 작성했으며 날짜 문제가 발생했습니다.전후의 날짜/시간 비교

사용자가 해당 날짜, 해당 날짜 또는 그 날짜 이후에 검색 한 날짜를 필터링 할 수 있기를 원합니다.

나는 과 같은 동적 쿼리를 생성하는 데 사용한 this answer을 발견했습니다. 정확히 일치하는 날짜를 검색하는 데는 문제가 없지만 이전 또는 이후의 항목을 검색하려고 시도 할 때는 유지되지 않습니다. 내가 얻은 가장 먼 것은 "(created.Year >= @0.Year && created.Month >= @0.Month && created.Day > @0.Day)입니다. 현재 달 밖에서는 아무 것도 작동하지 않습니다. (오늘 이후에 검색 한 경우, 그 달 후에도 27 일이 지나도 결과가 표시됩니다. 내가 검색 한 날짜)

DateTime.Compare을 사용해 보았지만 작동하지 않았으며 DateTime.Date를 비교하려고 시도하지도 않았습니다.

T-SQL을 직접 사용하면 부족할 수 있습니다.

편집 : 나는 비교 "에"및 직전과 Corak가 제안 후 엄격한 > 또는 <을 수행하는 기존 코드를 사용하여 결국 "(created.Date == @0.Date)"

enter image description here

+2

단순히'created.Date> @ yourDate.Date' 또는'created.Date <@ yourDate.Date'가 아닌 이유는 무엇입니까? ('created'과'@ yourDate'는'DateTime' 타입입니다.) – Corak

+0

Linq to Entities가 지원하지 않기 때문에 ... – Mansfield

+0

'.Day','.Month'를 지원한다면 * 매우 * 놀랄 것입니다. '.Year'는'.Date'가 아니라'.Year'입니다. – Corak

답변

0

와.

if (Comparison == ComparisonType.Equals) { 
    return string.Format("({0}.Year {2} @{1}.Year && {0}.Month {2} @{1}.Month && {0}.Day {2} @{1}.Day)", FieldName, index, ComparisonType.Equals.Evaluate()); //workaround for "exactly equals date" 
} else if (Comparison == ComparisonType.Less_Than) { 
     Value = ((DateTime)Value).Minimize(); //set the time values of the date to the minimums (00:00:00 000) 
} else if (Comparison == ComparisonType.Greater_Than) { 
     Value = ((DateTime)Value).Maximize(); //set the time values of the date to the maximums (23:59:59 999) 
} 

return string.Format("({0} {1} @{2})", FieldName, Comparison.Evaluate(), index); 
관련 문제