返回DataRow,其字段是指定列的最大值

时间:2016-04-19 20:21:21

标签: c# .net vb.net linq

我希望能够从数据行数组中获取数据行,其中数据行具有所有数据行中指定列的最大值。

我想它会跟随这个LINQ语句

Dim minRow As DataRow = myDataRows.AsEnumerable.Min(Function(row) row.Field(Of Decimal)("myColumnName"))

但Max函数返回小数而不是数据行。是否有一些简单的语法可以为我处理这样的查询?

在有人要求之前,我标记c#因为在winforms中他们可以使用网站轻松地在彼​​此之间进行转换。

2 个答案:

答案 0 :(得分:1)

如果您可以使用MoreLINQ,则可以使用MaxBy()轻松完成此操作:

var maxRow = myDataRows.MaxBy(r => r.Field<Decimal>("myColumnName"));

但是使用常规 Linq

var minRow = myDataRows.OrderBy(r => r.Field<decimal>("myColumnName")).FirstOrDefault();
var maxRow = myDataRows.OrderBy(r => r.Field<decimal>("myColumnName")).LastOrDefault();

答案 1 :(得分:1)

有点晚但我想分享它;),你可以用O(n)代替O(n * log n)(这是OrderBy扩展方法的顺序),如果你使用Aggregate扩展方法:

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

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