Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
C# 返回其字段为指定列的最大值的DataRow_C#_.net_Vb.net_Linq - Fatal编程技术网

C# 返回其字段为指定列的最大值的DataRow

C# 返回其字段为指定列的最大值的DataRow,c#,.net,vb.net,linq,C#,.net,Vb.net,Linq,我希望能够从datarow数组中获取datarow,其中datarow对于所有datarow中的指定列具有最大值 我想它也会像LINQ的声明一样 Dim minRow As DataRow = myDataRows.AsEnumerable.Min(Function(row) row.Field(Of Decimal)("myColumnName")) 但是,Max函数返回一个十进制数,而不是数据行。有什么简单的语法可以帮我处理这样的查询吗 在任何人询问之前,我先给c加上标签,因为在winfo

我希望能够从datarow数组中获取datarow,其中datarow对于所有datarow中的指定列具有最大值

我想它也会像LINQ的声明一样

Dim minRow As DataRow = myDataRows.AsEnumerable.Min(Function(row) row.Field(Of Decimal)("myColumnName"))
但是,Max函数返回一个十进制数,而不是数据行。有什么简单的语法可以帮我处理这样的查询吗

在任何人询问之前,我先给c加上标签,因为在winforms中,它们可以通过网站轻松地相互转换。

如果可以使用,可以通过使用
MaxBy()
轻松完成:

var maxRow=myDataRows.MaxBy(r=>r.Field(“myColumnName”);
但是使用常规Linq:

var minRow=myDataRows.OrderBy(r=>r.Field(“myColumnName”)).FirstOrDefault();
var maxRow=myDataRows.OrderBy(r=>r.Field(“myColumnName”)).LastOrDefault();

有点晚了,但我还是想和大家分享;),如果使用
Aggregate
extension方法,可以用O(n)代替O(n*logn)(这是
OrderBy
扩展方法的顺序):

var minRow =myDataRows.Aggregate(myDataRows[0],(seed,next)=>next.Field<decimal>("myColumnName").Field<decimal>("myColumnName")?next:seed);
var minRow=myDataRows.Aggregate(myDataRows[0],(seed,next)=>next.Field(“myColumnName”).Field(“myColumnName”)?next:seed);

检查您的
myDataRows
数组是否至少有一行

是否可以使用常规Linq查找最大值和最小值?谢谢您的回答,我比您投了更高的票。但语法更为重要,因为这是针对没有严格性能要求的最终用户应用程序的。在这个问题上,更容易的代码可读性胜过性能。
var minRow = myDataRows.OrderBy(r => r.Field<decimal>("myColumnName")).FirstOrDefault();
var maxRow = myDataRows.OrderBy(r => r.Field<decimal>("myColumnName")).LastOrDefault();
var minRow =myDataRows.Aggregate(myDataRows[0],(seed,next)=>next.Field<decimal>("myColumnName").Field<decimal>("myColumnName")?next:seed);