2009-08-06 43 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