C# 使用LINQ到SQL查询日期

C# 使用LINQ到SQL查询日期,c#,performance,linq,date,linq-to-sql,C#,Performance,Linq,Date,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;

我在发布日期列中有这些记录,它们是字符串。我想在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();
Func tryToGetDate=value=>
{
日期时间日期值;
return DateTime.TryParse(value,out dateValue)?(DateTime?)dateValue:null;
};       
var日期=(来自bookcategories中的bookdetails
让dateValue=tryToGetDate(bookdetails.PublishedDate)
其中dateValue!=null
&&(DateTime)dateValue>=两个月
&&(DateTime)dateValue q.Author.Author1).ToList(),
CategoryList=bookdetails.BookCategories.Select(q=>q.Category.CategoryName).ToList()
}).取(2)ToList();
快速解决方案是

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);
var dates=(来自bookcategories中的bookdetails
其中SqlFunctions.IsDate(bookdetails.PublishedDate)=1
orderby bookdetails.PublishedDate降序,bookdetails.BookId)
托利斯先生()
.Where.(b=>Convert.ToDateTime(b.PublishedDate)>=两个月

&&Convert.ToDateTime(b.PublishedDate)你最好选择日期列,然后从中过滤出日期、月份、年份或你需要的任何组合。使用字符串,你将面临解析问题……我希望我可以,但问题是我不能。为什么你的日期
DateTime
不在数据库中?我从google books api获取它,他们有dateti将列指定为字符串。即使他们的数据以字符串的形式返回,您肯定可以在输入数据库之前解析它?