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

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

  • A列|排名
  • 心|9
  • 肺|10
  • minValue 将返回 10,maxvalue 将返回 9。我的猜测是因为它被视为字符串,即使每个值都是 int。有没有解决的办法?

    4

    2 回答 2

    3

    不要List<T>从 中创建 a DataTable,这只会使所需内存翻倍而没有任何好处。使用Linq-To-DataSetwhich 是 的子集Linq-To-Objects

    要么该列已经是 type 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")));
    
    于 2013-09-13T20:27:04.510 回答
    0

    前提是您的 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()最有可能在评估时使用内置函数强制转换为字符串。

    于 2013-09-13T20:23:27.807 回答