检查dataTable中是否存在值?

我有两列AuthorBookname的 DataTable。

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

您可以使用Enumerable.Any使用LINQ-to-DataSet

 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... } 

问:如果我们不知道列标题,那么如果在任何行的列中存在任何单元值PEPSI ,我们该怎么办? 我可以循环这一切找出来,但有没有更好的办法? –

是的,你可以使用这个查询:

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

你可以使用Linq。 就像是:

 bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0; 
 DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name"); if (rw != null) { // row exists } 

添加到您的使用条款:

 using System.Linq; 

并添加:

System.Data.DataSetExtensions

参考。

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

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

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

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

LINQ Query on Datatable来检查是否存在logging

给出的例子是

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

你可以补充任何地方