Linq |日期|具有匹配问题的减法

时间:2009-08-06 23:15:40

标签: c# linq subsonic

我想查看1天创建的记录,下面是我的代码。我的问题是,即使我确实有匹配,它也会返回任何记录。

即使我在LinqPad上运行它,它只是输出空白结果。

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

但是当我尝试删除“where”

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上运行,但仍然不支持cu上的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);
}
..

3 个答案:

答案 0 :(得分: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中使用本地数据库。这有点像kludge,但似乎有效。

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

答案 1 :(得分:0)

怎么样

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

答案 2 :(得分:0)

在另一个stackoverflow问题中找到最佳答案..转发利益

How do I OrderBy a DateTime difference in Linq?

James Curan写道

奇怪的是,“Subtract()”不起作用,但Minus确实如此。尝试:

orderby(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