我有广告牌容量的DB表。例如,该表包含广告牌ID,从日期容量到日期结束(id = 1,fromdate 4.11.17 todate 19.11.17),表格中有几行为此广告牌ID(21.11.17 - 5.12.2017) ,20.12.2017 - 20.12.2017)。我想进行一些查询检查,看看这个广告牌是否在两个日期之间可用,而我得不到正确的结果。例如,我正在检查日期,如3.11.17 - 3.12.17或6.11.17 - 21.11.17。我需要的结果是如果广告牌在我查询的确切日期可用。任何想法?
public static int CheckisMediaAvailable(cDataClassesDataContext db,
long bId, DateTime fromdate_date, DateTime todate_date)
{
return (from check in db.BillboardCapacities
where check.BillboardID == bId
&& check.AssociateGuid == UserAccountManager.AssociateGuid
&& Convert.ToDateTime(check.FromDate).Date >= fromdate_date
&& Convert.ToDateTime(check.ToDate).Date <= todate_date
select check).Count();
}
答案 0 :(得分:0)
将<=
和>=
转过来?如果你想检查来自fromdate_date的广告牌是否可用,那么存储的数据应该更早,并且todate应该大于你检查日期的日期:
*****************************************************
####################### -> ok
**************
#################### -> not ok
**********************************
############################## -> not ok
答案 1 :(得分:0)
如果要检查2个范围日期是否在任何点重叠,则需要检查2个案例:
FromDate
位于从fromdate_date
到todate_date
的范围内;和,ToDate
位于fromdate_date
到todate_date
的范围内。如果这些条件中的任何一个为真,那么就会有重叠。
在案件之前,证明如果条件都不满足,那么没有重叠。使用Patrick Artner的图表:
fromdate_date f***********t todate_date
FromDate F#########T ToDate F#########T
了解
FromDate
&{39}和ToDate
&#fromdate_date
与todate_date
之间的关系。
<强>案例1 强>
如果广告牌在todate_date
之前或之后完成,只要它在fromdate_date
之后(或之前)和{{1}之前(或之前)开始,这并不重要}}
todate_date
您可以认为
f***********t F#########T F#####T
被困在FromDate
和fromdate_date
内,因此它必须与它们重叠。
<强>情况2 强>
如果广告牌在todate_date
之前或之后开始,只要它在fromdate_date
之后(或之前)和{{1}之前(或之前)完成,这并不重要}}
fromdate_date
类似地,您可以感觉
todate_date
被困在f***********t F#########T F#####T
和ToDate
内,因此它必须与它们重叠。
因此,您对日期的条件必须如下:
fromdate_date