如何在数据表中搜索Col1 ="MyValue"的行中的行
我在想类似的东西
Assert.IsTrue(dataSet.Tables[0].Rows. FindAll(x => x.Col1 == "MyValue" ).Count == 1);
但当然这不起作用!
您可以使用LINQ to DataSet来执行此操作:
Assert.IsTrue(dataSet.Tables[0].AsEnumerable().Where( r => ((string) r["Col1"]) == "MyValue").Count() == 1);
注意,您也可以在不调用Assert的情况下执行此操作:
dataSet.Tables[0].AsEnumerable().Where( r => ((string) r["Col1"]) == "MyValue").Single();
如果行数不等于1(因此,调用Single
),那么将引发异常,并且未处理的异常应该失败测试用例.就个人而言,我喜欢后者,因为它具有更清晰的语义.
以上可以进一步削减到:
dataSet.Tables[0].AsEnumerable().Single( r => ((string) r["Col1"]) == "MyValue");
此外,你可以利用的Field
方法对DataRowExtensions
类简化为字段类型安全的访问(以及提供转换的额外的好处DBNull
,以在.NET空同行):
dataSet.Tables[0].AsEnumerable().Single( r => r.Field("Col1") == "MyValue");
您可以使用Select
数据表的方法执行此操作,或使用表上的Filter属性DefaultDataView
.
对于Select
方法:
var rows = dataSet.Tables[0].Select("Col1 = 'MyValue'");
对于DefaultView
过滤器:
dataSet.Tables[0].DefaultView.Fitler = "Col1 = 'MyValue'"; foreach (var drv in dataSet.Tables[0].DefaultView) { // Do your processing }