Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从DataTable访问数据时出现问题_C# - Fatal编程技术网

C# 从DataTable访问数据时出现问题

C# 从DataTable访问数据时出现问题,c#,C#,我有一个DataTable,我正试图逐行访问DataRow,如下所示: dataTable.Select("someID=" + someID.ToString()).CopyToDataTable().Rows.Count; 对于0-9的某个ID,这可以正常工作,但当我达到10时,会出现System.InvalidOperationException。在VisualStudioDataTableVisualizer中,我可以看到someID是数据为0-24的列之一,所以应该有10个 当我使用

我有一个DataTable,我正试图逐行访问DataRow,如下所示:

dataTable.Select("someID=" + someID.ToString()).CopyToDataTable().Rows.Count;
对于0-9的某个ID,这可以正常工作,但当我达到10时,会出现System.InvalidOperationException。在VisualStudioDataTableVisualizer中,我可以看到someID是数据为0-24的列之一,所以应该有10个

当我使用即时窗口并查看数据表时,选择(“someID=10”)
{System.Data.DataRow[0]}
并查看
dataTable.Select(“someID=9”)
为我提供
{System.Data.DataRow[1]}


我遗漏了什么?

那么,既然只需要匹配的计数,为什么还需要
CopyToDataTable()
方法呢?你可以简单地使用
长度
计数
,不是吗

x = dataTable.Select("someID=" + someID.ToString()).Length;

即时窗口显示没有
someID
等于10的行。它应该在那里,但它不在那里。你想用这个查询做什么?您正在检查行是否存在吗?someID在DataTable Visualizer窗口中显示为列标题,其中一行的someID列中有一个10。结果是:
var result=string.Join(“,”,DataTable.Select()。Select(r=>r[“someID”].ToString()).ToArray()
为我打印结果,别忘了使用System.Linq添加
@RezaAghaei可能你想要这个
String.Join(“,”,dataTable.AsEnumerable().Select(r=>r.Field(“someId”))
@SergeyBerezovskiy感谢你提醒
dataTable
,但是
dataTable.Select()
也可以工作,因为
dataTable.Select()
返回
DataRow[]
而且我还使用了
ToString()
,因为我不知道值的类型,而且可能
字段
不合适。是的,但在这种情况下,我更担心的是11不存在,而我可以通过其他方式查看是否存在。但是,我将更改验证行数的方式!如果
someID
datacolumn是字符串类型,则可能需要将select表达式(值部分)括在单引号中。e、 g.
someID='11'
就是这样做的!阅读问题本身下的评论,我想知道是否还有更好的方法来循环元素。。目前我正在使用
foreach(dataTable.Select中的DataRow dr(“addressID=”+someID.ToString()+“”)).CopyToDataTable().Rows)
您不需要
CopyToDataTable()
部分;这增加了额外的开销。您应该能够直接使用
foreach(dataTable.Select中的DataRow dr(“addressID=”“+someID.ToString()+”))
,当然,除非您确实需要行的副本而不是行本身。