2012-08-08 72 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 
} 
相关问题