2012-08-08 71 views
0

我有一個搜索頁面,其中的文章可以按日期搜索。搜索條件僅適用於月份和年份。 所以每當月份被選中,點擊「過濾器」 我把這個月的開始日爲「dtStartDate」 和每月「dtEndDate」的結束日如何檢查,如果兩個日期之間的c#或Vb.net的另外兩個日期之間

這也給搜索的文章有 有效開始日期爲「EffStartDate」 和有效的結束日期爲「EffEndDate」

那麼應該是什麼狀態,如果,這兩個「EffStartDate」和「EffEndDate」瀑布裏面 「dtStartDate」和「dtEndDate」?

我給了這個嘗試,但結果不正確,

If (EffStartDate >= dtStartDate & EffStartDate <= dtEndDate) 

    //Do Something  

ElseIf (EffEndDate >= ddl_FromDate & EffEndDate <= dtEndDate.AddDays(1)) Then 

    //Do Something 

End If 

場景: 讓我們假設有兩篇文章,其將要使用不同的日期進行搜索。現在

Article - 1 
EffStartDate = 11/7/2012 
EffEndDate = 31/8/2012 

Article - 2 
EffStartDate = 1/7/2012 
EffEndDate = 28/9/2012 

,在我的搜索頁面,當我搜索2012年1月7日的文章31/07/2012 我應該看到文章的結果,因爲無論是effstardate和effenddate地方 落在用於搜索的日期之間。 但現在我只看到Artilce - 1。爲什麼?

+0

1)如果你可以使用一個數據庫 「中選擇」 是 「之間」 的條款 - 做到這一點。 2)否則,如果您*必須*在C#代碼中執行此操作(與SQL「選擇」相比),請使用[Date.Subtract/TimeSpan](http://msdn.microsoft.com/zh-cn/library/ 8ysw4sby.aspx)。 – paulsm4 2012-08-08 04:03:19

+0

你能否詳細說明爲什麼結果不正確?你得到的結果和你期望的結果是什麼?你使用LINQ來實體嗎? – gideon 2012-08-08 04:22:22

+0

@gideon請用場景檢查更新後的問題。謝謝 – Anuya 2012-08-08 04:41:08

回答

2

從您的示例中可以明顯看出,您的標準文本是錯誤的。如果文章的整個有效範圍符合完全在搜索範圍內,則您的條件的文本指出您只想顯示文章,如果有效開始日期和結束日期都落在日期範圍內。但是,您的示例表明,如果日期範圍的任何部分都符合搜索範圍,那麼您要顯示該文章。編輯澄清這將有所幫助,但現在我會向前推進,假設這個例子是正確的解釋。

您似乎也將VB.Net和C#的語言語法混合在一起。你不能只是混合這樣的語法。你的代碼片段中最強烈的影響似乎是VB.Net,所以我將在我的例子中使用它。

在VB.Net,您可以編寫符合您的搜索像這樣的條件。例如:

If  (EffStartDate >= dtStartDate AndAlso EffStartDate < dtEndDate.AddDays(1)) _ 
    OrElse (EffEndDate >= dtStartDate AndAlso EffEndDate < dtEndDate.AddDays(1)) 
    OrElse (EffStartDate < dtEndDate.AddDays(1) AndAlso EffEndDate >= dtStartDate) Then 
    '... 
End If 

我還擔心你在If塊都編寫這些代碼。如果這些日期在數據庫中,那麼數據庫是到目前爲止是篩選結果的最佳位置。如果數據位於其他地方,那麼某種類型的linq-to-objects查詢可能會產生更好的性能,並且更短,更易於維護。

+0

爲上述情況...您的邏輯工作正常。它爲我提供了兩篇文章。但是,當我搜索2012年1月8日至2012年8月31日期間的文章時,它也應該給我兩篇文章作爲結果!但現在不是......它只顯示文章-1 – Anuya 2012-08-08 05:06:26

+0

修復了問題 – 2012-08-08 05:18:59

+0

它的工作原理...謝謝 – Anuya 2012-08-08 05:28:08

0

我沒有得到你的問題很好,但像他這樣的簡單

bool isStartEffDateInside=(EffStartDate >= dtStartDate && EffStartDate <= dtEndDate); 
bool isEndEffDateInside=(EffEndDate >= ddl_FromDate && EffEndDate <= dtEndDate.AddDays(1)); 

if(isStartEffDateInside || isEndEffDateInside) 
{ 
// do something global 
    if(isStartEffDateInside && isEndEffDateInside) 
    { 
     //Do something when the two Effs are inside the StartEnd 
    } 
} 

希望這有助於

+0

即使在使用ur邏輯之後,結果也不是預期的。請檢查我現在添加的場景。感謝 – Anuya 2012-08-08 04:40:34

0

C#版本:

if ((EffStartDate >= dtStartDate && EffStartDate <= dtEndDate) || 
    (EffEndDate >= dtStartDate && EffEndDate <= dtEndDate)) 
{ 
    // Good Article 
} 
else 
{ 
    // Bad Article 
} 
相關問題