当前位置:  开发笔记 > 编程语言 > 正文

如何使用lambda表达式过滤DataRows?

如何解决《如何使用lambda表达式过滤DataRows?》经验,为你挑选了2个好方法。

如何在数据表中搜索Col1 ="MyValue"的行中的行

我在想类似的东西

Assert.IsTrue(dataSet.Tables[0].Rows.
    FindAll(x => x.Col1 == "MyValue" ).Count == 1);

但当然这不起作用!



1> casperOne..:

您可以使用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");



2> davisoa..:

您可以使用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
}

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有