101

我有两列AuthorBookname的 DataTable 。

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

4

5 回答 5

224

您可以LINQ-to-DataSet使用Enumerable.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 列中是否存在任何单元格值怎么办?我可以全部循环以找出答案,但有更好的方法吗?——</p>

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

DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
    .Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
于 2012-05-22T13:46:55.953 回答
14

您可以使用 Linq。就像是:

bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0;
于 2012-05-22T13:46:37.680 回答
10
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}

添加到您的 using 子句:

using System.Linq;

并添加:

System.Data.DataSetExtensions

参考。

于 2012-05-22T13:49:34.823 回答
5

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

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

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

于 2012-05-22T13:52:15.363 回答
0

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

对数据表进行 LINQ 查询以检查记录是否存在

给出的例子是

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

你可以用任何补充 where

于 2012-05-22T13:46:50.800 回答