查找DateTime和DateTime之间的差异

时间:2013-07-04 04:20:28

标签: c# linq datetime

您好我已经写过像这样的linq查询

IssuedBooks = (from transaction in db.BookTransaction
    join tag in db.BookTagMaster on transaction.BookTagID equals tag.ID
    where tag.IsTagActive == true
    join book in db.BookMaster on tag.BookID equals book.ID
    join author in db.AuthorMaster on book.AuthorID equals author.ID
    join category in db.CategoryMaster on book.CategoryID equals category.ID
    join publisher in db.PublisherMaster on book.PublisherID equals publisher.ID
    select new BookIssuedView
    {
        ID = transaction.ID,
        EmployeeName = transaction.EmployeeName,
        IssuedDate = transaction.IssuedDate,
        ReturnDate = transaction.ReturnDate,
        BookName = book.Name,
        AuthorName = author.Name,
        CategoryName = category.Name,
        PublisherName = publisher.Name,
        SiteID = tag.SiteID,
        BuildingID = tag.BuildingID,
        LateFees = transaction.LateFees,
        DueDate = transaction.DueDate,
        LateBy = (!transaction.IsReturned)?0:(transaction.ReturnDate - transaction.DueDate).TotalDays   
    }).ToList();         

但我的ReturnDate是一个可以为null的变量,类型为DateTime?而且DueDate只是DateTime,因此编译器抛出一个错误,这个无法完成任何身体可以帮助我解决这个问题

1 个答案:

答案 0 :(得分:1)

您可以检查可空日期时间的HasValue属性,然后将Value属性(在本例中为DateTime)与DueDate进行比较:

IssuedBooks = (from transaction in db.BookTransaction
join tag in db.BookTagMaster on transaction.BookTagID equals tag.ID
where tag.IsTagActive == true
join book in db.BookMaster on tag.BookID equals book.ID
join author in db.AuthorMaster on book.AuthorID equals author.ID
join category in db.CategoryMaster on book.CategoryID equals category.ID
join publisher in db.PublisherMaster on book.PublisherID equals publisher.ID
select new BookIssuedView
{
    ID = transaction.ID,
    EmployeeName = transaction.EmployeeName,
    IssuedDate = transaction.IssuedDate,
    ReturnDate = transaction.ReturnDate,
    BookName = book.Name,
    AuthorName = author.Name,
    CategoryName = category.Name,
    PublisherName = publisher.Name,
    SiteID = tag.SiteID,
    BuildingID = tag.BuildingID,
    LateFees = transaction.LateFees,
    DueDate = transaction.DueDate,
    LateBy = (!transaction.IsReturned && !transaction.ReturnDate.HasValue)?0:(transaction.ReturnDate.Value - transaction.DueDate).TotalDays   
}).ToList();