2013-11-01 4 views
0

게시 된 날짜 열에 이러한 레코드가 있습니다. LINQ to SQL에서 두 날짜 사이의 쿼리를 수행하려고합니다. 올바른 날짜를 쿼리하고 잘못된 날짜를 남기지 않는 가장 적절한 방법은 무엇입니까?LINQ to SQL을 사용하여 날짜 쿼리

published date 

jan 
11-oct 
2010-09-09 
feb 
feb-12 

아래 코드는 내 문제를 해결하지만 큰 레코드에는 많은 시간이 소요되며 LINQ to SQL이 아닙니다.

Func<string, DateTime?> tryToGetDate = value => 
{ 
    DateTime dateValue; 
    return DateTime.TryParse(value, out dateValue) ? (DateTime?)dateValue : null; 
};  


var dates = (from bookdetails in bookcategories 
      let dateValue = tryToGetDate(bookdetails.PublishedDate) 
      where dateValue != null 
      && (DateTime)dateValue >= twomonths 
      && (DateTime)dateValue <= today 
      orderby bookdetails.PublishedDate descending, bookdetails.BookId 

      select new BookInfo 
      { 
       BookId = bookdetails.BookId, 
       BookTitle = bookdetails.Title, 
       Images = bookdetails.ThumbnailImagePath, 
       PublishDate = bookdetails.PublishedDate, 
       AuthorList = bookdetails.BookAuthors.Select(q => q.Author.Author1).ToList(), 
       CategoryList =bookdetails.BookCategories.Select(q=>q.Category.CategoryName).ToList()        
      }).Take(2).ToList(); 
+0

더 나은 당신이 날짜 열에 가서 거기에서 일을 필터링한다 "날짜로 변환" , 월 또는 연도 또는 필요한 조합을 선택하십시오. 문자열을 사용하면 구문 분석 문제에 직면하게됩니다 ... –

+0

내가 할 수 있으면 좋겠지 만 문제는 내가 할 수 없다는 것입니다. – maztt

+0

날짜가'DateTime'이 (가) 데이터베이스에없는 이유는 무엇입니까? – Arran

답변

0

빠른 해결책은

var dates = (from bookdetails in bookcategories 
     where SqlFunctions.IsDate(bookdetails.PublishedDate)==1 
     orderby bookdetails.PublishedDate descending, bookdetails.BookId) 
     .ToList() 
     .Where.(b=> Convert.ToDateTime(b.PublishedDate) >= twomonths 
       && Convert.ToDateTime(b.PublishedDate) <= today); 

입니다하지만 당신은 여전히 ​​원한다면 더 성능이 매핑해야합니다 함수 SQL

관련 문제