2012-04-18 69 views
16

2個日期時間之間的差異,我想這樣做:的Linq:在時間跨度

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

我得到了「DbArithmeticExpression參數必須有一個數字常見的類型」的錯誤。考慮到我需要TimeSpan的區別,我該如何做到這一點?

在此先感謝。

+0

你在連接什麼?這是LINQ到SQL,EF,你是否期待這在內存中完成?編輯:注意到它有一個標籤;將有助於提出一些在問題的主體中很重要的內容。 – Servy 2012-04-18 18:09:06

+0

Linq to Entities。 – Leila 2012-04-18 18:14:39

回答

26

您可能需要使用SqlFunctions.DateDiff

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

請告訴我,上面的代碼中「second」字的含義是什麼,它是否返回天數或不是...?請在你的答案中提及我...... – 2016-01-22 16:58:42

+1

@RahulChaudhari它正在返回秒數,因此「秒」這個詞。如果你想要天寫「日」。 – Magnus 2016-01-24 16:47:59

+1

好的,謝謝你,你是C#的老闆... ... – 2016-01-26 14:09:54

2

算術與日期時間在實體框架不支持。您必須使用SqlFunctions之一。所以,對於你的陳述,如:

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

對不起,關於投票。請稍微修改您的答案,然後我可以刪除它。 – Phil 2012-04-18 19:09:54

4

你也可以使用這個;

var result = db.Tickets.Where(t => 
     SqlMethods.DateDiffSecond(myTicket.Date , t.Date) < 120);