我有一个DataTable形式的结果集。
数据表有2个名为startTime
和endTime
的字段。
我需要在startTime
和endTime
字段中获得最大差异的行。
我认为这可以使用Linq轻松实现,但不知道如何在数据表上执行相同操作。
答案 0 :(得分:3)
Linq To DataSet正是您要找的。 p>
如果在数据表上调用AsEnumerable(),则可以向其编写正常的Linq查询。
答案 1 :(得分:2)
您可以按EndTime
和StartTime
字段之间的差异对DataTable中的行进行排序,然后从顶部选择第一行。
在此示例中,我使用DataTableExtensions.AsEnumerable()方法从指定的DataRow中获取DataTable个对象序列:
var rowWithLongestTimespan = (from row in dataTable.AsEnumerable()
let endTime = row.Field<DateTime>("EndTime")
let startTime = row.Field<DateTime>("StartTime")
orderby endTime - startTime descending
select row).First();
答案 2 :(得分:1)
var maxDiff = dataTable
.AsEnumerable()
.Select(row => row.Field<DateTime>("endDate") - row.Field<DateTime>("startDate"))
.Max();
var allHavingMaxDiff = dataTable
.AsEnumerable()
.Where(row => row.Field<DateTime>("endDate") - row.Field<DateTime>("startDate") == maxDiff);
var oneHavingMaxDiff = allHavingMaxDiff.First();