0

我有一个搜索页面,可以按日期搜索文章。搜索条件仅包含月份和年份。So whenever the month is selected and clicked "filter" I take the start day of that month as "dtStartDate" and end day of the month as "dtEndDate"

必须搜索的文章还具有有效开始日期为“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 年 7 月 7 日至 2012 年 7 月 31 日之间的文章时,我应该会看到这两篇文章的结果,因为 effstardate 和 effenddate 都位于用于搜索的日期之间。但现在我只看到 Artilce - 1 结果。为什么 ?

4

4 回答 4

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 查询可能会产生更好的性能,并且更短且更易于维护。

于 2012-08-08T04:52:39.173 回答
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
    }
}

希望这可以帮助

于 2012-08-08T04:28:22.030 回答
0

您是否尝试过DateTime.CompareTo方法?

于 2012-08-08T04:37:30.007 回答
0

C#版本:

if ((EffStartDate >= dtStartDate && EffStartDate <= dtEndDate) ||
    (EffEndDate >=  dtStartDate && EffEndDate <= dtEndDate))
{
    // Good Article
}
else
{
    // Bad Article
}
于 2012-08-08T04:55:12.860 回答