2009-08-06 88 views
1

我想檢查1天創建的記錄,下面是我的代碼。我的問題是,即使我有一場比賽,它也會返回任何記錄。Linq |日期|減號與匹配問題

即使我在LinqPad上運行它,它只是輸出空白的結果。

from x in Users 
where (DateTime.Today - x.CreatedDate).ToString().Equals("1.00:00:00") 
select x 

,但是當我嘗試刪除 「其中」

from x in Users 
select x 

這裏有可能會導致下面,你可以看到,有1場比賽:

ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/6/2009 12:00:00 AM | Result : 1.00:00:00 | Condition : True 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 
ToDay : 8/7/2009 12:00:00 AM | CreatedDate : 8/7/2009 12:00:00 AM | Result : 00:00:00 | Condition : False 

NUnit.Framework.AssertionException: Expected: greater than 0 
    But was: 0 

我運行這在IQueryable,AddDays和類似的不支持,即使下面的一些帖子將在LinqPad上運行,但仍然不支持在C#上的IQueryable。

,可能的解決方案是:

IList<Users> users = new List<Users>(); 
var qry = from x in Users 
select x; 
foreach(user in qry) 
{ 
if(!DateTime.Today - x.CreatedDate).ToString().Equals("1.00:00:00")) continue; 
users.Add(user); 
} 
.. 

回答

1

你有沒有嘗試過沒有字符串轉換?

from x in Users 
where DateTime.Today.Subtract(x.CreatedDate).Equals(New Timespan(1, 0, 0, 0)) 
select x; 

編輯:使用Linq to Sql將適合DateTime函數。改變你的選擇,以便你在DateTime上進行相減,並修改該字符串,使其看起來像SQL Server正在生成的內容。例如,我注意到,我的SQL Server爲日期添加了前導空格字符,因此昨天是"Aug__5_2009_12:00AM":(空格更改爲下劃線,以便您可以看到差異)。無論如何,我得到這個在LINQPad上針對本地數據庫的工作。這是一個混亂,但似乎工作。

from x in Users 
where x.CheckDate.ToString() == DateTime.Today.AddDays(-1).ToString("MMM dd yyyy hh:mmtt").Replace(" 0", " ") 
select x 
+0

似乎有一個語法錯誤,@jocob。對不起,我在Linq上也是1天,你能再次提供上面的正確語法嗎? – 2009-08-06 23:30:59

+0

方法'System.TimeSpan Subtract(System.DateTime)'不支持對SQL的轉換。 僅供參考,我正在使用上面的服務層,這是通常的IQueryable(C#)形式 – 2009-08-06 23:35:39

+1

啊。 Linq to Sql不支持日期添加和減去功能(雖然我聽到4.0會)。這意味着你的函數(DateTime.Today - x.CreatedDate)也不會產生結果。我不確定爲什麼它會吞掉減法,可能是由於ToString()。 – 2009-08-07 01:26:49

0

如何

from x in Users where (x.CreatedDate < DateTime.Today.AddDays(1).Date && x.CreatedDate > DateTime.Today.AddDays(-2).Date) select x 
+0

加入日期不支持 – 2009-08-08 04:11:36

+0

@No身體 - 你是怎麼說的?在發佈之前,我在LinqPad中成功地回覆了我的回覆。 – kevinw 2009-08-08 22:16:41

0

發現在另一個計算器問題的最佳答案..重新發布了好處

How do I OrderBy a DateTime difference in Linq?

詹姆斯卒然寫道

奇怪的是,「減( )「不起作用,但是Minus會。嘗試:

排序依據(t.UsedCount /(DateTime.Now - t.CreatedDate.Value).Days)

(使用 「主」 數據庫測試中LINQPad)

from sp in Spt_monitors 
orderby sp.Io_busy/(DateTime.Now - sp.Lastrun).Days 
select sp