【问题标题】:Check if value exists in dataTable?检查数据表中是否存在值?
【发布时间】:2012-05-29 00:29:00
【问题描述】:

我有两列 AuthorBookname 的 DataTable。

我想检查给定的字符串值 Author 是否已经存在于 DataTable 中。是否有一些内置方法来检查它,比如数组array.contains

【问题讨论】:

  • LINQ? table.Any(t => t.Author == author);

标签: c# datatable


【解决方案1】:

您可以将LINQ-to-DataSetEnumerable.Any 一起使用:

String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));

另一种方法是使用DataTable.Select

DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
    // do something...
}

问:如果我们不知道列 Headers 并且我们想查找是否有,该怎么办? 单元格值PEPSI 存在于任何行的c 列中吗?我可以把它全部循环到 找出但有更好的方法吗? ——

是的,您可以使用此查询:

DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
    .Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));

【讨论】:

  • 将这些System.Data.DataSetExtensions 添加到引用和using System.Linq; 到使用类
  • 两种解决方案,哪个更快?
  • @PaulAlexander:差别不大。但是旧的 DataTable.Select 语法是有限的,而 LINQ 可以使用完整的 .NET 框架或自定义方法。所以只有当你坚持使用 .NET 2 时,你才应该使用 DataTable.Select,否则我总是更喜欢 LINQ
  • 如果您关心性能并拥有大型数据集,tbl.Select() 比其他方法快得多。
  • @TimSchmelter - 伟大的蒂姆。但是,如果用户不知道列名但仍想获取与搜索值匹配的所有行,该怎么办?
【解决方案2】:

您可以使用 Linq。比如:

bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0;

【讨论】:

    【解决方案3】:
    DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
    if (rw != null)
    {
    // row exists
    }
    

    添加到您的 using 子句:

    using System.Linq;
    

    并添加:

    System.Data.DataSetExtensions

    参考文献。

    【讨论】:

      【解决方案4】:

      您应该可以使用DataTable.Select() 方法。你可以这样我们。

      if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
          ...
      

      Select() 函数为与 where 语句匹配的结果返回一个 DataRows 数组。

      【讨论】:

        【解决方案5】:

        您可以将数据库设置为 IEnumberable 并使用 linq 检查值是否存在。 看看这个链接

        LINQ Query on Datatable to check if record exists

        给出的例子是

        var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
        

        你可以用 any 来补充 where

        【讨论】:

          猜你喜欢
          • 2019-11-13
          • 2014-10-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-26
          • 2016-10-20
          • 1970-01-01
          • 2021-05-24
          相关资源
          最近更新 更多