2011-09-09 95 views
1

我必須編寫一個LINQ語句來查找過去90天內某個項目在數據庫中出現的次數。這很簡單,但他們希望按照1-30天,31-60天和61-90天的時間查看數據。比較LINQ中的過去日期

我目前正在做的是創建一個包含四組數據的模型,獲取所有唯一SKU的列表,然後查找它們在數據庫中出現的次數。

我的問題是日期範圍。我創建了新的DateTime對象併爲它們添加了NEGATIVE天,我試圖用它來比較範圍。我不知道如何說這樣的話:

編輯日期介於(-30天)和(-60天)之間。

我無法爲此使用SP。必須有一個更簡單的方法。也許使用時間跨度並查看它是否落入該跨度?我不確定。我很少用日期工作。

+0

向日期時間添加負數日期沒有任何問題。另外,如果他們只想要出現的次數,爲什麼你需要一組數據?只需將.Count()添加到您的LINQ查詢中並直接獲取該數字即可。 – Mathieu

+0

@Mathieu。我添加了.Count(),但我無法獲得正確的日期過濾器。它返回0是因爲(正如我在下面發佈的),我是在反向比較日期。 – Chase

回答

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

啊,我很愚蠢。這正是我所擁有的,除了我是在反向比較日期,這就是爲什麼我一直得到0. *面掌 – Chase

+0

@Chase:只是很高興你沒有做任何更復雜的事情。日期和時間的算術可以得到*硬* ... http://noda-time.blogspot.com/2010/11/joys-of-datetime-arithmetic.html –

+0

我很高興。我使用過的日期最多的是捕獲對象添加到數據庫的日期和/或返回時將該日期格式化爲字符串。大聲笑。 – Chase

1
DateTime date1 = DateTime.Now().AddDays(-30); 
DateTime date2 = DateTime.Now().AddDays(-60); 

if (yourDate.Date >= date2.Date && yourDate.Date <= date1.Date) 
{ 
    //DoSomething 
} 
+1

不要調用'DateTime.Now'兩次 - 最終可能會在兩者之間更改日期。基本上你希望你的兩個日期基於同一時間。 –

-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; 
0

當您不確定您的結構時,很難寫出LINQ查詢。但要獲得該日期範圍,你可以做這樣的事情代碼:

var difference = laterDate - earlierDate; 

if (difference <= TimeSpan.FromDays(60) && difference >= TimeSpan.FromDays(30)) ... 
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