当前位置:  开发笔记 > 编程语言 > 正文

如何选择数据表中列的最小值和最大值?

如何解决《如何选择数据表中列的最小值和最大值?》经验,为你挑选了6个好方法。

对于以下数据表列,获取最小值和最大值的最快方法是什么?

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 MinMax扩展将总是较慢,因为您必须迭代两次.您可以使用Linq Aggregate,但语法不会比现在更漂亮.



1> Lalit..:

对数据表的Easiar方法可能是:

int minLavel = Convert.ToInt32(dt.Compute("min([AccountLevel])", string.Empty));



2> Aaronaught..:
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 MinMax扩展将总是较慢,因为您必须迭代两次.您可以使用Linq Aggregate,但语法不会比现在更漂亮.


我可能会晚一点,但minAccountLevel总是等于int.MinValue,因为accountLevel永远不会小于int.MinValue?maxAccountLevel和int.MaxValue也一样,不是吗?

3> Cylon Cat..:

使用LINQ.只要将rows集合转换为IEnumerable,它就可以在数据表上正常工作.

List levels = AccountTable.AsEnumerable().Select(al => al.Field("AccountLevel")).Distinct().ToList();
int min = levels.Min();
int max = levels.Max();

编辑修复语法; 在DataTables上使用LINQ时很棘手,聚合函数也很有趣.

是的,可以使用一个查询完成,但是您需要生成结果列表,然后使用.Min()和.Max()作为单独语句中的聚合函数.



4> 小智..:

这对我来说很好

int  max = Convert.ToInt32(datatable_name.AsEnumerable()
                        .Max(row => row["column_Name"]));



5> SLaks..:

执行此操作(信不信由你)的最有效方法是创建两个变量并编写for循环.



6> Chaowlert Ch..:
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风格:)

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有