如何在DataTable上实现Linq

时间:2011-11-25 09:35:04

标签: .net linq ado.net

我有一个DataTable形式的结果集。 数据表有2个名为startTimeendTime的字段。 我需要在startTimeendTime字段中获得最大差异的行。

我认为这可以使用Linq轻松实现,但不知道如何在数据表上执行相同操作。

3 个答案:

答案 0 :(得分:3)

Linq To DataSet正是您要找的。

如果在数据表上调用AsEnumerable(),则可以向其编写正常的Linq查询。

答案 1 :(得分:2)

您可以按EndTimeStartTime字段之间的差异对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();