2016-06-29 2 views
-1

입력 한 값을 검색 할 수 있도록 날짜를 문자열로 변환하려고합니다. 난 그냥 간단한 날짜를 사용하려면 lamda 표현식과 DateTime.ParseExact를 사용하고 있습니다.Entity Framework를 사용하여 날짜별로 검색하는 방법은 무엇입니까?

var devices = db.Devices 
      .Include(d => d.DeviceType) 
      .Include(d => d.ManufacturerModel) 
      .Include(d => d.ManufacturerModel.Manufacturer); 

내 검색 당신은 아직도 시간, 분, 초를 비교해야하기 때문에 당신은 쉽게 두 날짜를 비교할 수 없습니다

if (!String.IsNullOrEmpty(searchString5)) 
{ 
    devices = devices.Where(s => DateTime.ParseExact(s.DateReceived,'dd/MM/yyyy'); 
} 
+0

당신이 겪고있는 문제는 무엇입니까? – AlwaysAProgrammer

+0

'Where'는 부울 값을 반환해야하는 _predicate_를 취합니다. 반환 된 데이터를 비교하려고 했습니까? 아니면 구문 분석이 성공한 항목 만 원합니까? –

+1

날짜를 문자열로 변환하려는 경우 왜 구문 분석을 시도하나요? 형식으로 ToString을 호출하면됩니다. 실제로 여기서 무엇을하려고하는지 명확하지 않습니다. –

답변

1

:

이 내 데이터베이스에 연결입니다.

대신 사용자가 범위 - 날짜 및 종료일을 선택할 수 있도록하려고합니다. 예를 들어

,

var query = db.Devices 
      .Include(d => d.DeviceType) 
      .Include(d => d.ManufacturerModel) 
      .Include(d => d.ManufacturerModel.Manufacturer); 

string fromDate = "1/15/2016", toDate = "1/30/2016"; 
    DateTime fromDateTime, toDateTime; 

if(!DateTime.TryParse(fromDate, out fromDateTime)) 
{ 
    // Make fromDateTime to Start of Day - 1/15/2016 12:00:00 AM 
    fromDateTime = fromDateTime.Date; 
    query = query.Where(x => x.Date >= fromDateTime); 
} 

if (!DateTime.TryParse(toDate, out toDateTime)) 
{ 
    // Make toDateTime to End of day - 1/30/2016 11:59:59 PM 
    toDateTime = toDateTime.Date.AddDays(1).AddTicks(-1); 
    query = query.Where(x => x.Date <= toDateTime); 
} 

var result = query.ToList(); 
0

문자열을 사용하지 마십시오. 프레임 워크가 당신을 위해 힘든 일을하도록하십시오.

생성 된 SQL은 (내 경우에는) 다음과 같습니다. 쿼리를 작성하고 분석하는 LINQPad를 사용

-- Region Parameters 
DECLARE @p0 DateTime = '2016-03-19 00:00:00.000' 
-- EndRegion 
SELECT 
    ... 
FROM 
    ... 
WHERE CONVERT(DATE, [t0].[Fecha]) = @p0 

여기 팁입니다. 무료입니다. (유료 버전은 저렴하지만 터무니없이 강력하고 유용합니다.)

관련 문제