首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果数据为int,DataTable.AsEnumerable().ToList();min/max返回无效

如果数据为int,DataTable.AsEnumerable().ToList();min/max返回无效
EN

Stack Overflow用户
提问于 2013-09-13 20:20:20
回答 2查看 1.7K关注 0票数 2
代码语言:javascript
复制
var list = ProcessedInformationTable.AsEnumerable().ToList();
                        var minValue = list.Min(v => v["Rank"]);
                        var maxValue = list.Max(v => v["Rank"]);

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

  • 哥伦纳级
  • 心脏.9
  • 肺.10

minValue将返回为10,maxvalue将返回为9。我猜是因为它被视为字符串,即使每个值都是int。有办法绕道吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-13 20:27:04

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

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

代码语言:javascript
复制
var rows = ProcessedInformationTable.AsEnumerable();
int minValue = rows.Min(r => r.Field<int>("Rank"));
int maxValue = rows.Max(r => r.Field<int>("Rank"));

如果是字符串:

代码语言:javascript
复制
int minValue = rows.Min(r => int.Parse(r.Field<string>("Rank")));
int maxValue = rows.Max(r => int.Parse(r.Field<string>("Rank")));
票数 3
EN

Stack Overflow用户

发布于 2013-09-13 20:23:27

如果您的Rank列是一个整数且不包含空值,则为:

代码语言:javascript
复制
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()作为字符串进行转换。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18794584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档