繁体   English   中英

DataTable.AsEnumerable()ToList(); 如果数据为int,则最小/最大返回值无效

[英]DataTable.AsEnumerable().ToList(); min/max return invalid if data is int

var list = ProcessedInformationTable.AsEnumerable().ToList();
                        var minValue = list.Min(v => v["Rank"]);
                        var maxValue = list.Max(v => v["Rank"]);

在上面的代码中,如果我具有

  • ColumnA |排名
  • 心脏| 9
  • 龙| 10
  • minValue将返回为10,maxvalue将返回为9。我的猜测是,即使每个值都是一个整数,也将其视为字符串。 有没有解决的办法?

    不要从DataTable创建List<T>DataTable会使所需的内存增加一倍而没有任何好处。 使用Linq-To-DataSet ,它是Linq-To-Objects的子集。

    要么该列已经是int类型,那么您就必须对其进行强制转换,或者实际上是string 然后,您必须更改它或先使用ìnt.Parse

    var rows = ProcessedInformationTable.AsEnumerable();
    int minValue = rows.Min(r => r.Field<int>("Rank"));
    int maxValue = rows.Max(r => r.Field<int>("Rank"));
    

    如果是字符串:

    int minValue = rows.Min(r => int.Parse(r.Field<string>("Rank")));
    int maxValue = rows.Max(r => int.Parse(r.Field<string>("Rank")));
    

    前提是您的Rank列是整数,并且不包含null:

    var list = ProcessedInformationTable.AsEnumerable().ToList();
    var minValue = list.Min(v => (int)v["Rank"]);
    var maxValue = list.Max(v => (int)v["Rank"]);
    

    v["Rank"]最有可能在评估时使用内置object.ToString()转换为字符串。

    暂无
    暂无

    声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

     
    粤ICP备18138465号  © 2020-2024 STACKOOM.COM