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

本文关键字:返回 无效 ToList AsEnumerable 如果 DataTable 数据 int | 更新日期: 2023-09-27 18:31:19

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

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

  • 专栏 A|排
  • 心|9
  • 肺|10
  • 最小值将返回为 10,最大值将返回为 9。 我的猜测是因为它被视为一个字符串,即使每个值都是一个整数。 有没有办法解决这个问题?

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

    不要从DataTable创建List<T>,这只会使所需的内存加倍而没有任何好处。使用 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 列是整数且不包含空值:

    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()转换为字符串。