我有两列 作者和 书名的 DataTable。
我想检查给定的字符串值 作者是否已经存在于 DataTable 中。是否有一些内置的方法来检查它,如数组 array.contains?
array.contains
You can use Linq. Something like:
bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0;
you could set the database as IEnumberable and use linq to check if the values exist. check out this link
LINQ Query on Datatable to check if record exists
the example given is
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
you could supplement where with any
You can use LINQ-to-DataSet with Enumerable.Any:
LINQ-to-DataSet
Enumerable.Any
String author = "John Grisham"; bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
Another approach is to use DataTable.Select:
DataTable.Select
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'"); if(foundAuthors.Length != 0) { // do something... }
Q: what if we do not know the columns Headers and we want to find if any cell value PEPSI exist in any rows'c columns? I can loop it all to find out but is there a better way? –
PEPSI
Yes, you can use this query:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray(); bool anyFieldContainsPepsi = tbl.AsEnumerable() .Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name"); if (rw != null) { // row exists }
add to your using clause :
using System.Linq;
and add :
System.Data.DataSetExtensions
to references.
You should be able to use the DataTable.Select() method. You can us it like this.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0) ...
The Select() funciton returns an array of DataRows for the results matching the where statement.