我想查看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);
}
..
答案 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