检查dataTable中是否存在值?

val*_*ann 78 c# datatable

我有DataTable,有两列AuthorBookname.

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

Tim*_*ter 188

你可以用LINQ-to-DataSetEnumerable.Any:

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

另一种方法是使用DataTable.Select:

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

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

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

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

  • @PaulAlexander:没有太大区别。但是旧的“DataTable.Select”语法受到限制,而 LINQ 可以使用完整的 .NET 框架或自定义方法。因此,只有当您坚持使用 .NET 2 时,您才应该使用“DataTable.Select”,否则我总是更喜欢 LINQ (2认同)

mse*_*dio 9

你可以使用Linq.就像是:

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


Ant*_*ula 6

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

添加到您的using子句:

using System.Linq;
Run Code Online (Sandbox Code Playgroud)

并添加:

System.Data.DataSetExtensions

参考.


Kib*_*bee 5

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

if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
    ...
Run Code Online (Sandbox Code Playgroud)

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