【发布时间】:2012-05-29 00:29:00
【问题描述】:
我有两列 Author 和 Bookname 的 DataTable。
我想检查给定的字符串值 Author 是否已经存在于 DataTable 中。是否有一些内置方法来检查它,比如数组array.contains?
【问题讨论】:
-
LINQ?
table.Any(t => t.Author == author);
我有两列 Author 和 Bookname 的 DataTable。
我想检查给定的字符串值 Author 是否已经存在于 DataTable 中。是否有一些内置方法来检查它,比如数组array.contains?
【问题讨论】:
table.Any(t => t.Author == author);
您可以将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 列中吗?我可以把它全部循环到 找出但有更好的方法吗? ——
是的,您可以使用此查询:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
【讨论】:
System.Data.DataSetExtensions 添加到引用和using System.Linq; 到使用类
DataTable.Select 语法是有限的,而 LINQ 可以使用完整的 .NET 框架或自定义方法。所以只有当你坚持使用 .NET 2 时,你才应该使用 DataTable.Select,否则我总是更喜欢 LINQ
tbl.Select() 比其他方法快得多。
您可以使用 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 子句:
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 to check if record exists
给出的例子是
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
你可以用 any 来补充 where
【讨论】: