1
我有一個DataTable具有以下結構。 起始日期(DateTime類型) 結束日期(DateTime類型) 描述(類型文本)使用LINQ排序數據表
我需要檢查是,如果日期重疊與否,也就是說,如果1項的開始日期小於的結束日期前一個項目。
這是我寫的代碼。
注:我已經有檢查,以確保每個記錄的開始日期必須是於結束日期
dtDates.DefaultView.Sort = "StartDate ASC"; //Sort the DataTable based on the Start Dates
if(dtDates.Rows.Count > 1) //Check only if more than 1 Date is specified
{
for (int i = 1; i < dtDates.Rows.Count; i++)
{
if(TypeConvert.ToDate(dtDates.Rows[i]["StartDate"] < TypeConvert.ToDate(dtDates.Rows[i-1]["EndDate"])
{
retVal = true;
currentRow = i;
break;
}
}
}
上面的代碼工作正常較小。
但現在,我想使用LINQ
所以,這裏是我想嘗試的代碼來實現它。
如何使用LINQ做整個比較?
public static bool CheckIfDatesOverlap(DataTable dataTable)
{
bool retVal = false;
int currentRow = 0;
List<DataRow> listDates = (from DataRow dgv in dataTable.Rows
select dgv).OrderBy(x => x[StartDate]).ToList();
if (listDates.Count > 1) //Perform Comparision only if more than 1 row is present
{
for (int i = 1; i < listDates.Count; i++)
{
if (TypeConvert.ToDateTime(listDates[i][StartDate]) < TypeConvert.ToDateTime(listDates[i][EndDate]))
{
retVal = true; //There are duplicates, hence return true
currentRow = i;
break;
}
else
{
//Do nothing as dates do not overlap
}
}
}
else
{
retVal = false; //As there is only 1 row, return false
}
if (retVal)
{
string message = "Dates Overlap";
//Display message
}
return retVal;
}
喬恩斯基特罷工再次:)謝謝指點出來,這幫助了我很多,我猜這就是OP正在尋找的答案。 –