我必须编写一个LINQ语句,该语句查找项目在过去90天内出现在数据库中的次数。这很简单,但他们希望在1-30天,31-60天和61-90天内查看数据。
我目前正在做的是创建一个包含四组数据的模型,获取所有唯一SKU的列表,然后查找它们在数据库中出现的次数。
我的问题是日期范围。我正在创建新的DateTime对象并向他们添加NEGATIVE天,我正在尝试使用它来比较范围。我无法弄清楚如何说出这样的话:
编辑日期介于(-30天)和(-60天)之间。
我无法使用SP。必须有一个更简单的方法。也许使用时间跨度,看看它是否落在那个跨度?我不确定。我很少与约会合作。
答案 0 :(得分:5)
类似的东西:
DateTime today = DateTime.Today;
DateTime minusThirty = today.AddDays(-30);
DateTime minusSixty = today.AddDays(-60);
// Normally I wouldn't use a query expression for just a single where clause,
// but I assume you want more...
var query = from item in db.Table
where item.Date >= minusSixty && item.Date < minusThirty
select item;
您可能想要<=
和>
- 您应该为自己解决这个问题。但是,您几乎肯定希望一个一定是包容性的,并且一个必然是独占的,并且始终如一地使用它们 - 这样,任何项目都不会在多个存储桶中结束。
答案 1 :(得分:1)
DateTime date1 = DateTime.Now().AddDays(-30);
DateTime date2 = DateTime.Now().AddDays(-60);
if (yourDate.Date >= date2.Date && yourDate.Date <= date1.Date)
{
//DoSomething
}
答案 2 :(得分:0)
在不确定您的结构时难以编写LINQ查询。但要获得该日期范围,您可以在代码中执行以下操作:
var difference = laterDate - earlierDate;
if (difference <= TimeSpan.FromDays(60) && difference >= TimeSpan.FromDays(30)) ...
答案 3 :(得分:0)
这似乎对我有用VB.NET 3.5 返回过去10分钟内的商品清单...我确定可以根据您的需求进行调整
' if online time is greater than 10 minutes ago pickup user check onLineTime.Date = now.AddMinutes(-10).Date check onLineTime.TimeOfDay = now.AddMinutes(-10).TimeOfDay
Dim rsl = From s In db.tblSessions Where (s.SessionID <> context.Session.SessionID AndAlso s.onLineTime.Date = DateTime.Now.AddMinutes(-10).Date AndAlso s.onLineTime.TimeOfDay > DateTime.Now.AddMinutes(-10).TimeOfDay)
其中s.onLineTime是SQL DATETIME字段即。 2015-02-11 04:49:26.283
答案 4 :(得分:-1)
你为什么不做像
这样的事情 TimeSpan beginning = TimeSpan.FromDays(30);
TimeSpan end = TimeSpan.FromDays(60);
var query = from item in database
let difference = DateTime.Now - item.TimeStamp
where difference > beginning &&
difference < end
select item;