使用 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 => row.Field<DateTime>("startDate")
的内容。这些Convert
s 不是必需的。
@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# 使用带有 where 子句的 Linq 查询作为 dataTable 上的变量