Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果输入不';不在范围之内_C#_Sql_Linq - Fatal编程技术网

C# 如果输入不';不在范围之内

C# 如果输入不';不在范围之内,c#,sql,linq,C#,Sql,Linq,作为输入,我得到startDate和endDate。我必须从客户端执行linq查询,以检查在这段时间内数据库中是否存在任何现有条目 例如,在我的数据库中,如果我有一个起始日期为2018-01-05、结束日期为2018-01-09的条目,并且用户试图输入另一个起始日期为2018-01-04、结束日期为2018-01-06的条目,我不应该允许这样做,因为在我的数据库中,我已经有一个在此时间范围内通用的条目。这是我的密码 var stDate = dbcontext.tables.Where( st

作为输入,我得到startDate和endDate。我必须从客户端执行linq查询,以检查在这段时间内数据库中是否存在任何现有条目

例如,在我的数据库中,如果我有一个起始日期为2018-01-05、结束日期为2018-01-09的条目,并且用户试图输入另一个起始日期为2018-01-04、结束日期为2018-01-06的条目,我不应该允许这样做,因为在我的数据库中,我已经有一个在此时间范围内通用的条目。这是我的密码

 var stDate = dbcontext.tables.Where( st => 
                             st.StartDate <= UserStartDate && st.EndDate >= UserEndDate && st.Status == "Queued" ||
                             st.StartDate >= UserStartDate && st.EndDate >= UserEndDate && st.Status == "Queued" ||
                             st.StartDate <= UserStartDate && st.EndDate <= UserEndDate && st.Status == "Queued" ||
                             st.StartDate >= UserStartDate && st.EndDate <= UserEndDate && st.Status == "Queued").ToList();
                if (stDate.Count >0 )
                {
                    //notification to user("There is an existing request within this time range");
                }
                else
                {
                    // do the rest operation
                }
var stDate=dbcontext.tables.Where(st=>
st.StartDate=UserEndDate&&st.Status==“排队”||
st.StartDate>=用户StartDate和st.EndDate>=用户EndDate和st.Status==“排队”||

st.StartDate您的逻辑有点不正确。在所有情况下,您都将
StartDate
UserStartDate
进行比较,并将
EndDate
UserEndDate
进行比较。相反,您应该在每个情况下比较相同的内容。请参见以下内容:

var stDate = dbcontext.tables
             .Where(st =>  st.Status == "Queued" 
               && (  st.StartDate >= UserStartDate && st.StartDate < UserEndDate   
                  || st.StartDate > UserStartDate  && st.StartDate <= UserEndDate  
                  || st.EndDate >= UserStartDate   && st.EndDate < UserEndDate     
                  || st.EndDate > UserStartDate    && st.EndDate <= UserEndDate )
              ).ToList();

我总是会在查询本身中进行这样的过滤/检查。将数据检索到您的客户机进行过滤/检查时,会要求获得诸如竞争条件、过度网络负载等问题。至于“查找数据是否在范围内”问题,这也是一个困扰我的问题。你能检查一下这个范围的
。Status
吗?我不认为有任何日期范围不符合这些条件。你是对的@FaizanRabbani,你知道如果用户的开始和结束日期不符合现有条目,我如何允许用户输入吗..我必须使用排队因为我的其他条目可能在同一时间范围内,但状态不同。我不关心这些状态。@Shaif您是否只希望开始和结束都不在现有范围内?这些范围可以吗:
2018-01-08
&
2018-01-15
2018-01-02
&
2018-01-07
2018-01-01
&
e> 2018-01-15
?比您@Sudsy1002更重要,但如果我遵循您的代码,则问题在于用户无法为小于DB的开始和结束日期创建条目。例如,如果有人试图将条目2018-01-04添加到2018-01-05,则会阻止them@Shaif我已经编辑过,因此
StartDate
的值可以与
UserEndDate
的值相同de>EndDate
可以与
UserStartDate
的值相同,但不能同时满足这两个值(因为这会导致数据重叠)。您应该使用
.Any()
而不是
.ToList()
和a
.Count>0
之后,出于性能原因。如果数据库中有很多行,您将无法获得数百万个匹配项。非常感谢@Sudsy1002。问题已解决。我刚刚添加了另一个检查点,用于不允许用户在雾凇范围内添加条目。
st.StartDate=user.EndDate&&st.Status==“排队”
@Shaif,感谢您的光临。答案已更新。
st.StartDate <= UserStartDate && st.EndDate >= User.EndDate && st.Status == "Queued"