C# 从DataTable访问数据时出现问题
我有一个DataTable,我正试图逐行访问DataRow,如下所示: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.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()+”))
,当然,除非您确实需要行的副本而不是行本身。