.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();