Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何在DataTable上实现Linq_.net_Linq_Ado.net - Fatal编程技术网

.net 如何在DataTable上实现Linq

.net 如何在DataTable上实现Linq,.net,linq,ado.net,.net,Linq,Ado.net,我有一个数据表形式的结果集。 数据表有两个字段,分别名为startTime和endTime。 我需要在startTime和endTime字段中获取差异最大的行 我认为使用Linq可以很容易地实现这一点,但不知道如何在数据表上实现这一点。正是您想要的 如果您在datatable上调用AsEnumerable(),您可以向它写入一个普通的Linq查询。就是您想要的 如果在datatable上调用AsEnumerable(),则可以向其写入一个普通的Linq查询。您可以根据EndTime和StartT

我有一个数据表形式的结果集。 数据表有两个字段,分别名为
startTime
endTime
。 我需要在
startTime
endTime
字段中获取差异最大的行

我认为使用Linq可以很容易地实现这一点,但不知道如何在数据表上实现这一点。

正是您想要的

如果您在datatable上调用AsEnumerable(),您可以向它写入一个普通的Linq查询。

就是您想要的


如果在datatable上调用AsEnumerable(),则可以向其写入一个普通的Linq查询。

您可以根据
EndTime
StartTime
字段之间的差异对中的行进行排序,并从顶部选择第一行

在本例中,我使用该方法从指定的

var rowWithLongestTimespan=(来自dataTable.AsEnumerable()中的行)
让endTime=row.Field(“endTime”)
让startTime=row.Field(“startTime”)
orderby endTime-startTime递减
选择行);

您可以根据
EndTime
StartTime
字段之间的差异对中的行进行排序,并从顶部选择第一行

在本例中,我使用该方法从指定的

var rowWithLongestTimespan=(来自dataTable.AsEnumerable()中的行)
让endTime=row.Field(“endTime”)
让startTime=row.Field(“startTime”)
orderby endTime-startTime递减
选择行);
var maxDiff=dataTable
.可计算的()
.Select(行=>row.Field(“结束日期”)-row.Field(“开始日期”))
.Max();
var allHavingMaxDiff=数据表
.可计算的()
其中(行=>行字段(“结束日期”)-行字段(“开始日期”)==最大差异);
var oneHavingMaxDiff=allHavingMaxDiff.First();
var maxDiff=dataTable
.可计算的()
.Select(行=>row.Field(“结束日期”)-row.Field(“开始日期”))
.Max();
var allHavingMaxDiff=数据表
.可计算的()
其中(行=>行字段(“结束日期”)-行字段(“开始日期”)==最大差异);
var oneHavingMaxDiff=allHavingMaxDiff.First();

数据集关联的
数据表
是否强类型?如果是,该
数据集
是否强类型?与
数据集
关联的
数据表
是否强类型?如果是,该
数据集
是否强类型?但这里我想对开始时间和结束时间的差异执行Max操作。这样做是可能的通过Linq@SumitGupta对看到我的答案了。但这里我想对开始时间和结束时间的差值执行Max操作。这样做是可能的通过Linq@SumitGupta对看我的答案。我不会在这里使用orderby。排序是O(n*log(n))max是O(n)。@achitaka-san-True。IMHO这只是一个比某些替代方案更简单的解决方案,例如,根据
endTime
startTime
之间的差异对行进行分组,然后选择差异等于具有最高值的组的行。但正如您所说,这可能会导致性能问题,具体取决于查询中涉及的行数。排序是O(n*log(n))max是O(n)。@achitaka-san-True。IMHO这只是一个比某些替代方案更简单的解决方案,例如,根据
endTime
startTime
之间的差异对行进行分组,然后选择差异等于具有最高值的组的行。但正如您所说,这可能会导致性能问题,具体取决于查询中涉及的行数。
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();
        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();