C#-如何检测当前DataRow和下一个DataRow之间一列的更改



我查询了两个表,校车和小学生:

Select SB.BusNumber, SB.BusDriverLastName, SB.BusDriverFirstName, SP.LastName, SP.FirstName, SP.HomeTown, SP.Age, SP.BusFare 
From SchoolBus As SB 
Inner Join SchoolPupil As SP 
On SP.BusNumber = SB.BusNumber 
Order By SB.BusNumber, SP.HomeTown 

我需要在C#应用程序中阅读该查询,并对每个公交号码的家乡和公交票价进行相当复杂的计算。也就是说,对于BusNumber的每个值,我需要处理一组具有该值的所有数据行。

这意味着我需要检测值为BusNumber的最后一行。

它可以做得相当简单:

for (int z_intIdx = 0; z_intIdx < z_dstData.Tables[0].Rows.Count; z_intIdx++)
{
// do stuff with the DataRow and put it in an IEnumerable for later
if (z_intIdx == z_dstData.Tables[0].Rows.Count - 1 ||
z_dstData.Tables[0].Rows[z_intIdx] != z_dstData.Tables[0].Rows[z_intIdx + 1])
{
// do rather complications with the IEnumerable
}
}

但我忍不住觉得DataTableDataRowDataRowCollection或其他更简洁的方法或属性可能会让我使用foreachwhile循环。

那么,有什么东西可以代替上面的代码吗?

在karam yakoub-agha和jdweng的帮助下,我能够使用GroupBy()并将以下内容组合在一起:

foreach (List<DataRow> z_lisPupils in
z_dstData.Tables[0].AsEnumerable().GroupBy(pu => pu.Field<string>("BusNumber"),
pu => pu,
(bus, list) => list.ToList()))
{
// Now work with z_lisPupils
}

我认为应该注意的是,Enumerable.GroupBy()的行为方式与Group BySQL子句的行为方式不同。假设它确实存在是我以前没有使用它的部分原因。

再次感谢大家!

最新更新