2013-06-18 1 views
0

나는, 내 DropDownListBox의 값에 따라, 나는 절은 나중에 코드 등의 데이터를 필터링하려면 WHERE을는 포맷 엔티티 프레임 워크 내에서 제

Dim query = (
    From n In db.tblNews 
    Join nc In db.tblNewsCategories On n.CatID Equals nc.CategoryID 
    Order By n.DateEntered Descending 
    Select New With { 
     .NewsID = n.NewsID, 
     .Title = n.Title, 
     .NewsText = n.NewsText, 
     .isPublished = n.isPublished, 
     .CatID = n.CatID, 
     .CategoryName = nc.CategoryName, 
     .DateEntered = n.DateEntered, 
     .ReadCount = n.ReadCount, 
     .DatePublished = n.DatePublish 
     } 
    ) 

그럼 내 DB 컨텍스트에서 다음 쿼리를 적용 한 경우;

If sDate <> "" Then 
    query = query.Where(Function(n) n.DateEntered = sDate) 
End If 

지금, sDate는 2013-06-18의 형식으로 제공하고, DB에 해당 DateTime 필드는 쿼리가 제로 결과를 반환, 따라서 2013-06-18 16:41:33.973의 형식으로되어 있습니다.

나는 다음을 수행하려고 노력 해요 : 나에게 오류 준

If sDate <> "" Then 
    query = query.Where(Function(n) String.Format(n.DateEntered, {0:yyyy-MM-dd}) = sDate) 
End If 

: 엔티티에 LINQ는 방법을 인식하지 못하는 '선택 System.String ToString (선택 System.String를)'방법을이 메서드를 저장소 표현식으로 변환 할 수 없습니다.

나는 내 선택에서 날짜 형식을 지정하고 싶지 않기 때문에 결과가 데이터베이스와 정확히 같아야합니다.

내 쿼리의 where 절에서 날짜의 서식을 지정하려면 어떻게해야합니까? 내가 거기에 해결책이 없다면?

답변

0

시도 :

Dim dateStart = DateTime.Parse(sDate) 
Dim dateEnd = date.AddDays(1) 
query = query.Where(Function(n) n.DateEntered >= dateStart And n.DateEntered < dateEnd) 

기본적으로,이 DateEntered 다음날 바로 자정에 날짜 및 자정 인 sDate 사이에 있는지 확인합니다.

+0

경우이 적은이 하나를 시도 2 비교가 필요하기 때문에 이상적입니다. –

+0

맨손으로 날짜/시간을 비교하는 경우 LINQ를 사용하여 이런 식으로해야한다고 생각합니다. – Jacob

+0

당신은 여전히 ​​DateTime의 Date 부분을 잡고 날짜와 비교할 수 있어야합니다. .Net에서 Date는 기본적으로 Time 부분의 기본값을 갖는 DateTime입니다. –

0

sDate 변수의 형식을 변경하거나 최소한 새 형식으로 복사본을 만들어 LINQ 쿼리의 내용과 비교해야합니다. LINQ는 .ToString을 인식하지 못하므로 String 값과 Date 또는 DateTime 값을 비교하려고합니다. VB는 당신에게서 이런 종류의 물건을 감추는 것에 정말로 나쁘다. 그래서 당신은 당신이 무엇을 잘못하고 있는지 정말로 모른다.

If Not String.IsNullOrWhiteSpace(sDate) Then 
    Dim someDate As Date = DateTime.Parse(sDate).Date 
    query = query.Where(Function(n) n.DateEntered = someDate) 
End If 

편집 :

데이터베이스에 .DateEntered 값이 날짜 형식 (그리고 날짜 시간) 있다고 가정하면,이 시도는 날짜 시간

If Not String.IsNullOrWhiteSpace(sDate) Then 
    Dim someDate As Date = DateTime.Parse(sDate).Date 
    query = query.Where(Function(n) n.DateEntered.Date = someDate) 
End If 
+0

@Douglas 감사하지만 날짜 값은 DateTime2 데이터 형식입니다. 그렇지 않으면, 나는 평등 연산에 문제가 없을 것이다 (아마도)? –

+0

지금 사용해보고 작동하는지 알려주세요. 데이터베이스의 DateTime 값이 Nullable이 아닌 한 내가 만든 편집이 작동합니다. 그렇다면 n.DateEntered.Value.Date와 비교해야합니다. –