对于以下数据表列,获取最小值和最大值的最快方法是什么?
AccountLevel 0 1 2 3
Lalit.. 104
对数据表的Easiar方法可能是:
int minLavel = Convert.ToInt32(dt.Compute("min([AccountLevel])", string.Empty));
Aaronaught.. 53
int minAccountLevel = int.MaxValue; int maxAccountLevel = int.MinValue; foreach (DataRow dr in table.Rows) { int accountLevel = dr.Field("AccountLevel"); minAccountLevel = Math.Min(minAccountLevel, accountLevel); maxAccountLevel = Math.Max(maxAccountLevel, accountLevel); }
是的,这确实是最快的方式.使用Linq Min
和Max
扩展将总是较慢,因为您必须迭代两次.您可以使用Linq Aggregate
,但语法不会比现在更漂亮.
对数据表的Easiar方法可能是:
int minLavel = Convert.ToInt32(dt.Compute("min([AccountLevel])", string.Empty));
int minAccountLevel = int.MaxValue; int maxAccountLevel = int.MinValue; foreach (DataRow dr in table.Rows) { int accountLevel = dr.Field("AccountLevel"); minAccountLevel = Math.Min(minAccountLevel, accountLevel); maxAccountLevel = Math.Max(maxAccountLevel, accountLevel); }
是的,这确实是最快的方式.使用Linq Min
和Max
扩展将总是较慢,因为您必须迭代两次.您可以使用Linq Aggregate
,但语法不会比现在更漂亮.
使用LINQ.只要将rows集合转换为IEnumerable,它就可以在数据表上正常工作.
Listlevels = AccountTable.AsEnumerable().Select(al => al.Field ("AccountLevel")).Distinct().ToList(); int min = levels.Min(); int max = levels.Max();
编辑修复语法; 在DataTables上使用LINQ时很棘手,聚合函数也很有趣.
是的,可以使用一个查询完成,但是您需要生成结果列表,然后使用.Min()和.Max()作为单独语句中的聚合函数.
这对我来说很好
int max = Convert.ToInt32(datatable_name.AsEnumerable() .Max(row => row["column_Name"]));
执行此操作(信不信由你)的最有效方法是创建两个变量并编写for
循环.
var answer = accountTable.Aggregate(new { Min = int.MinValue, Max = int.MaxValue }, (a, b) => new { Min = Math.Min(a.Min, b.Field("AccountLevel")), Max = Math.Max(a.Max, b.Field ("AccountLevel")) }); int min = answer.Min; int max = answer.Max;
1次迭代,linq风格:)