2011-02-17 79 views
2

是否有任何簡單的方法比較日期,忽略年份,使用Linq和實體框架?比較日期,忽略年份 - Linq /實體框架

說我有以下

var result = context.SomeEntity.Where(e => e.SomeDate > startDate); 

這是假設SomeDate且StartDate是.NET日期時間的。

我想要做的就是比較這些日期,無需比較年份。 SomeDate可以是任何一年。有沒有簡單的方法來做到這一點?我能想到的唯一方法是使用下面的:

var result = context.SomeEntity(e => 
    e.SomeDate.Month > startDate.Month || 
    (e.SomeDate.Month == startDate.Month && e.SomeDate.Day >= startDate)); 

這種方法很快變得更爲複雜,如果我期待有一個結束日期爲好,因爲我將不得不爲的時候做這樣的事情考慮開始日期是在年底,結束日期是在開始。

有沒有簡單的方法可以解決這個問題?

更新:

我最終只是繞了我最初以爲在後的方式......大量的代碼的東西,概念簡單的挫折感。基本上只需要找到日期是否落在一個範圍內,忽略一年,如果startDate> endDate循環日曆如果有人知道更簡單的方法,請發帖,因爲我仍然感興趣。

回答

0

如果您確實需要僅比較日期(不是時間),那麼DateTime.DayOfYear屬性可能會有所幫助。但在這種情況下,你應該小心閏年。除此之外,我無法想象任何比您的方法更簡單的比較幾個月和幾天。

如果您只關心該方法在引入第二次比較後會變得更加複雜,那麼簡單的方法提取應該有所幫助。

另一種方法可能是創建一個擴展方法,它將返回一個適用於比較的數字。例如,讓我們調用這個方法GetYearIgnoringOrdinal()

public static int GetYearIgnoringOrdinal(this DateTime date) 
{ 
    return date.Month*100 + date.Day; 
} 

,然後用它是這樣的:

var result = context.SomeEntity.Where(e => e.SomeDate.GetYearIgnoringOrdinal() > startDate.GetYearIgnoringOrdinal()); 
+1

'DayOfYear'在LINQ to Entities中不受支持。 – bunglestink 2011-02-17 14:03:32

1

稍微簡單的尋找方式

var result = context.SomeEntity(e => 
    e.SomeDate.Month * 100 + e.SomeDate.Day > startDate.Month * 100 + startDate.Day 
); 

你也創建一個用戶定義的函數(假設SQL服務器被使用)並且該函數可以用於查詢中。