使用 Linq C# 在 DataTable 中查找重叠的日期

Posted

技术标签:

【中文标题】使用 Linq C# 在 DataTable 中查找重叠的日期【英文标题】:Find Date Overlapping in DataTable Using Linq C# [duplicate] 【发布时间】:2021-02-26 07:13:27 【问题描述】:

我有一个包含 startdate 和 enddate 列的数据表。我想使用 linq 检查重叠的开始日期和结束日期。

方法输入参数:

输入数据表

startDate endDate
01/Jan/2021 31/Jan/2021
01/Feb/2021 28/Feb/2021

输入参数

开始日期:2021 年 2 月 15 日

截止日期:2021 年 2 月 20 日

预期输出:真

我创建了一个函数来检查重叠日期。

private bool IsDateOverlap(DateTime? FromDate, DateTime? ToDate, DataTable Table)
        
            bool isOverlap = false;
            try
            
                for (int index = 0; index < Table.Rows.Count; index++)
                
                    if (index == this.RowID)
                        continue;
                    DateTime? rowFromDate = Convert.ToDateTime(Table.Rows[index]["startDate"]);
                    DateTime? rowToDate = Convert.ToDateTime(Table.Rows[index]["endDate"]);
                    isOverlap = (FromDate <= rowToDate && rowFromDate <= ToDate);
                    if (isOverlap)
                        break;
                
            
            catch (Exception ex)
             
            return isOverlap;
        

它工作正常。 我想用linq来做。提前致谢。

【问题讨论】:

您在寻找类似this answer 的东西吗? 在您的 LINQ 语句中使用类似 row =&gt; row.Field&lt;DateTime&gt;("startDate") 的内容。这些Converts 不是必需的。 @Gert Arnold 没有 Linq 问题。 我的意思是在您编写的 LINQ 中,通过从副本中获取代码。 【参考方案1】:

我有一个方法可以帮助你如何使用自定义对象而不是数据表。

  public static List<inputDataTable> ListOfDates = new List<inputDataTable>
        

               new inputDataTable  startDate = DateTime.Parse("01/Jan/2021"), endDate = DateTime.Parse("31/Jan/2021"),,
               new inputDataTable  startDate = DateTime.Parse("01/Feb/2021"), endDate = DateTime.Parse("28/Feb/2021"),,

        ;
  

 public static bool checkOverlapping(DateTime starDate, DateTime endDate, List<inputDataTable> storeDate)
        
            var e = storeDate.Where(a=> (starDate >= a.startDate && starDate <= a.endDate) || (endDate >= a.startDate && starDate <= a.endDate) );
            if(e.Count() > 0)
            
                return true;
            
            else
            
                return false;
            
           
        

您也可以访问这些线程; Check dates fall within range using Linq

Check One Date is falling Between Date Range-Linq query

【讨论】:

以上是关于使用 Linq C# 在 DataTable 中查找重叠的日期的主要内容,如果未能解决你的问题,请参考以下文章

C# 怎么在一个文件夹中查到日期最新的文件

C# 使用带有 where 子句的 Linq 查询作为 dataTable 上的变量

C# DataTable转Linq

C#将LINQ数据集转换为Datatable

使用 Linq C# 为 DataTable 的每条记录创建 XML 文件

c# datatable 分组并统计