【问题标题】:Check that a given date does not lie between two existing dates inside a datatable检查给定日期是否位于数据表中的两个现有日期之间
【发布时间】:2013-05-08 18:31:55
【问题描述】:

我有一张表可以存储学生休假开始日期和结束日期 像这样:

StudentID   Age   startDate   EndDate

1           14    5/05/2013   7/05/2013   
4           17    4/04/2012   8/10/2012

我需要检查是否有任何新申请的假期不在该学生已经安排的假期范围内。例如,对于 ID = 1 的学生,他们应该无法申请从 2013 年 6 月 5 日开始的假期。

我正在使用 c#,正在寻找使用 SQL 或 LINQ 的解决方案。

【问题讨论】:

  • “从 [TableName] 中选择计数 (*),其中 StudentID=@StudentID AND (startDate > @dateToCheck OR EndDate 0,则 dateToCheck 小于(或等于)startDate 或大于(或等于)EndDate

标签: c# asp.net sql database linq


【解决方案1】:

普通 SQL 从 StudentID = 'parameterID' and startDate

【讨论】:

    【解决方案2】:
    DateTime dtApplied;
    var allDates = yourDt.Rows.Cast<DataRow>().Where(x => dtApplied >= x.Field<DateTime>("startDate") && dtApplied <= x.Field<DateTime>("endDate"));
    

    但是,如果我是你,我会考虑在 SQL 中使用 BETWEEN

    【讨论】:

    • 我想使用他们的 studentid 来检查特定学生,而不是全部
    • 然后在 where 为该字段添加条件,或过滤过程 - 这在您的问题中不清楚。你可以自己做一些事情,你知道的
    【解决方案3】:

    你可以试试这个:

      var result = dt.AsEnumerable().Where(r =>((int)r["StudentID"])==stdID &&
                                           (DateTime)r["startDate"]<=yourStartDate &&
                                           (DateTime)r["EndDate"]=YourEndDate))
                                           .FirstOrDefault();
    

    或者你也可以这样做:

    string query="ID=1 AND startDate<=yourStratDate AND EndDate>=yourEndDate";
    DataRow [] dr=dt.Select(strQuery);
    

    【讨论】:

    • StartDateEndDate 变量代表什么?
    • 这些是StartDateEndDate 条件的变量。检查更新的代码。
    【解决方案4】:
    select student_id From TableName Where Student_id = 1 and @dateToCheck not( between startdate and enddate)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2018-06-28
      相关资源
      最近更新 更多