我正在使用linq从datagridview获取列值。一旦我有列值(数字),然后我想要基于范围的记录计数 这是我的代码 -
var column_values = radGridView1.Rows.Cast<Telerik.WinControls.UI.GridViewRowInfo>().Select(r => r.Cells["columnName"].Value);
int count = 0;
foreach(int i in columnvalues.ToList()){
if(i > 0.1 and i < 0.5) {
count++
}
}
但我收到此错误
无法投射类型的对象 键入'System.Collection.Generic.List`1 [System.Object]' system.IConvertible”。
我知道foreach条件错了但无法弄明白。数字也可以是小数。
还有一种直接的方法可以使用linq而不是使用for循环。
请帮忙。
答案 0 :(得分:0)
如果值实际为int,则可以使用.Cast()
:
foreach (int i in columvalues.Cast<int>())
如果它们是字符串,您可以解析它们:
foreach (int i in columvalues.Select(int.Parse))
答案 1 :(得分:0)
只需将Select更改为使用int.Parse:
Select(r => int.Parse(r.Cells["columnName"].Value.ToString()));
然后你可以迭代整数,不需要ToList
:
foreach(var i in columnvalues)
您也可以使用foreach
方法摆脱Count
:
var count = radGridView1.Rows.Cast<Telerik.WinControls.UI.GridViewRowInfo>()
.Select(r => int.Parse(r.Cells["columnName"].Value))
.Count(x => (your condition));
我将条件部分留给您,因为您在那里的条件永远不会是true
。