比较LINQ中过去的日期

时间:2011-09-09 14:27:52

标签: c# linq datetime

我必须编写一个LINQ语句,该语句查找项目在过去90天内出现在数据库中的次数。这很简单,但他们希望在1-30天,31-60天和61-90天内查看数据。

我目前正在做的是创建一个包含四组数据的模型,获取所有唯一SKU的列表,然后查找它们在数据库中出现的次数。

我的问题是日期范围。我正在创建新的DateTime对象并向他们添加NEGATIVE天,我正在尝试使用它来比较范围。我无法弄清楚如何说出这样的话:

编辑日期介于(-30天)和(-60天)之间。

我无法使用SP。必须有一个更简单的方法。也许使用时间跨度,看看它是否落在那个跨度?我不确定。我很少与约会合作。

5 个答案:

答案 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;