2

사용자 인터페이스에서 사용자가 선택할 수있는 고유 한 DateTimes 집합 (시간 부분 없음)이 있습니다. 이것은 "LastWeek"또는 "LastMonth"와 같은 범위가 아닙니다. 사용자는 그가 원하는 매일 매일을 선택할 수 있습니다. 일치하는 결과를 얻기 위해 EntityFramework에서 Linq-query하는 가장 좋은 방법은 무엇입니까? 나는 시간 부분과 함께 정보를 저장하는 Attribute CreatedAt가있는 Foo 테이블을 가지고있다. 물론 클라이언트 측에서 CreatedAt-Property를 확인하고 싶지 않습니다. SqlServer가 저를 위해 일해야합니다.Entity Framework : Linq를 사용하여 날짜 집합을 쿼리하는 가장 좋은 방법

var query = _entities.Foo.Where(x => x.UserID == user.ID); 

if (selectedDates.IsNullOrEmpty() == false) 
    query = query.Where(x => x.CreatedAt 'IsIn' selectedDates); 

or: 
foreach (var date in selectedDates) 
    query = query.Where(x => x.CreatedAt.Year == date.Year && x.Month == date.Month && x.Day == date.Month) //but of course here I have the problem that I have to use the 'Or'-Operator, not 'And'. 

가 어떻게이 작업을 수행 할 수 있습니다

가 나는가 someting처럼해야한다고 생각?

답변

4

당신은 서버에서 날짜의 절단을 수행 할 수 EntityFunctions.TruncateTime()를 사용할 수보십시오. 그럼이 라인을 따라 뭔가 작동합니다.

query = query.Where(x => selectedDates.Contains(EntityFunctions.TruncateTime(x)); 
+0

'EntityFunctions.TruncateTime()'은 사용되지 않으며 대체 이름은'DbFunctions.TruncateTime()'입니다. – mammadalius

1

에서 Contains 확장 방법을 호출 할 수 있습니다. 엔티티 프레임 워크 4.0이 이해하고 SQL에 IN 운영자로 번역합니다

if (selectedDates.IsNullOrEmpty() == false) 
    query = query.Where(x => selectedDates.Contains(x.CreatedAt)); 
1

query = query.Where(x => selectedDates.Contains(x.CreatedAt));

관련 문제