2012-05-22 240 views
58

我有两列DataTable 作者书名检查dataTable中是否存在值?

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

+6

LINQ? 'table.Any(t => t.Author == author);' – Davio

回答

157

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

问:如果我们不知道是什么的列标题和我们想找到如有 单元格的值PEPSI任何rows'c列是否存在?我可以循环一切到 找出来,但有没有更好的方法? -

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

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

添加这些'System.Data.DataSetExtensions'来引用和'使用System.Linq;'来使用类 – AsifAli72090

8

您可以使用Linq。例如:

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

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

LINQ Query on Datatable to check if record exists

给出的例子是

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

,你可以补充地方与任何

6
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name"); 
if (rw != null) 
{ 
// row exists 
} 

添加到您的使用条款:

using System.Linq; 

,并添加:

System.Data .DataSetExtensions

参考。

4

您应该可以使用方法。你可以像我们这样。

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

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