2012-04-03 11 views
8

Tôi đang cố gắng thực hiện Truy vấn với LINQ trên ASP.NET MVC 3.Sử dụng DateTime? .Value.TimeOfDay trong LINQ Truy vấn

Tôi có một mô hình, cho phép gọi nó là Sự kiện. Đối tượng sự kiện này có thuộc tính Date, của DateTime ?. Những gì tôi muốn là để lấy các sự kiện đó là giữa 2 TimeSpans.

Ngay bây giờ mã của tôi trông giống như sau:

TimeSpan From = new TimeSpan(8,0,0); 
TimeSpan Until = new TimeSpan(22,0,0); 

var events = 
    from e in db.Events 
    where e.Date.Value.TimeOfDay >= From, 
      e.Date.Value.TimeOfDay <= Until 
    select e; 

Một ngoại lệ được ném ra, nói với tôi rằng "Các loại quy định thành viên 'TimeOfDay' không được hỗ trợ trong LINQ to Entities."

Tôi không có cách nào giải quyết vấn đề này và tôi đã cố gắng cả ngày. Xin hãy giúp tôi, tôi rất thất vọng. :(

EDIT:..

tôi Quên để viết ở đây là "TimeOfDay" sau e.Date.Value Dù sao, tôi đã làm trong mã của tôi

tôi không thể sử dụng DateTime vì tôi phải lọc kiện xảy ra giữa thời gian nhất định trong ngày, bất chấp những ngày của sự kiện.

+1

Mã mẫu của bạn thậm chí không sử dụng 'TimeOfDay' - tôi giả định trong thực tế nó, thay vì sử dụng' Date' (theo mã của bạn)? –

+1

Tại sao bạn sử dụng hai đối tượng TimeSpan thay vì hai đối tượng DateTime để lọc các sự kiện? – Steven

Trả lời

13

Sử dụng Date and Time Canonical Functions for LINQ-to-Entities. Cụ thể, nhìn vào

CreateTime(hour, minute, second) 

Nếu bạn cần giúp gọi một chức năng kinh điển, xem How To: Call Canonical Functions.

+0

Điều này có vẻ là trên đường đua, tôi không biết về chức năng pháo hoa. Cảm ơn! Nhưng, làm thế nào tôi có thể chuyển đổi DateTime thành Time bằng cách sử dụng chúng? – Umagon

+0

@Umagon: Sử dụng 'datetime.Hour',' datetime.Minute' và 'datetime.Second'. – jason

+1

Ôi trời ơi! Điều này đã giải quyết được vấn đề của tôi! Tôi nghĩ tôi yêu bạn, LOL. Cảm ơn nhiều! : D – Umagon