2013-11-01 3 views
0

У меня есть эти записи в столбце опубликованной даты, которые являются строками. Я хочу запросить между двумя датами в LINQ to SQL. Каков наиболее подходящий способ запросить правильную дату и оставить недопустимые даты?Выполнение запросов с LINQ to SQL

published date 

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

ниже код решает мою проблему, но это очень много времени для больших записей, и это не LINQ к 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

Смежные вопросы