2012-04-18 28 views
16

Tôi đang cố gắng để làm điều này:LINQ: Sự khác nhau giữa 2 DateTimes trong TimeSpan

Tickets.Where(t => (t.Date - myTicket.Date) < TimeSpan.FromSeconds(120)); 

Tôi nhận được "lập luận DbArithmeticExpression phải có một số loại phổ biến" lỗi. Làm thế nào tôi có thể làm điều này, xem xét rằng tôi cần sự khác biệt trong một TimeSpan?

Xin cảm ơn trước.

+0

Bạn đang kết nối với? Là linq này để SQL, EF, bạn có mong đợi điều này được thực hiện trong bộ nhớ? Chỉnh sửa: nhận thấy có một thẻ cho nó; sẽ là hữu ích để đề cập đến một cái gì đó mà quan trọng trong cơ thể của câu hỏi mặc dù. – Servy

+0

LINQ to Entities. – Leila

Trả lời

26

Bạn sẽ muốn sử dụng SqlFunctions.DateDiff

Tickets.Where(t => 
     SqlFunctions.DateDiff("second", t.Date, myTicket.Date) < 120)); 
+0

hãy cho tôi biết, ý nghĩa của từ "thứ hai" trong mã trên của bạn là gì và nó có trả về số ngày hay không ... ??? xin vui lòng đề cập đến tôi trong câu trả lời của bạn ... –

+1

@RahulChaudhari Nó trả về số thứ hai do đó từ "thứ hai". Nếu bạn muốn viết ngày "ngày". – Magnus

+1

ok, cảm ơn bạn là ông chủ của C# ... –

2

Số học với DateTime không được hỗ trợ trong Entity Framework. Bạn phải sử dụng một trong số SqlFunctions. Vì vậy, đối với tuyên bố của bạn, chẳng hạn như:

Tickets.Where(t => 
     SqlFunctions.DateDiff("second", t.Date, myTicket.Date) < 120)); 
+0

Xin lỗi về cuộc bỏ phiếu xuống. Vui lòng thay đổi câu trả lời của bạn một chút và sau đó tôi có thể xóa nó. – Phil

4

Bạn cũng có thể sử dụng điều này;

var result = db.Tickets.Where(t => 
     SqlMethods.DateDiffSecond(myTicket.Date , t.Date) < 120); 
Các vấn đề liên quan