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"]);
在上面的代码中,如果我有
最小值将返回为 10,最大值将返回为 9。 我的猜测是因为它被视为一个字符串,即使每个值都是一个整数。 有没有办法解决这个问题?
不要从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()
转换为字符串。