Tôi có DataTable với hai cột Tác giả và Tên sách .
Tôi muốn kiểm tra xem giá trị chuỗi đã cho Tác giả đã tồn tại trong DataTable hay chưa. Có một số phương pháp tích hợp sẵn để kiểm tra nó, như đối với Mảng array.contains
không?
Tôi có DataTable với hai cột Tác giả và Tên sách .
Tôi muốn kiểm tra xem giá trị chuỗi đã cho Tác giả đã tồn tại trong DataTable hay chưa. Có một số phương pháp tích hợp sẵn để kiểm tra nó, như đối với Mảng array.contains
không?
Câu trả lời:
Bạn có thể sử dụng LINQ-to-DataSet
với Enumerable.Any
:
String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));
Một cách tiếp cận khác là sử dụng DataTable.Select
:
DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
// do something...
}
Hỏi: Điều gì sẽ xảy ra nếu chúng ta không biết các tiêu đề cột và chúng ta muốn tìm xem có giá trị ô nào
PEPSI
tồn tại trong bất kỳ cột nào của hàng không? Tôi có thể lặp lại tất cả để tìm ra nhưng có cách nào tốt hơn không? -
Có, bạn có thể sử dụng truy vấn này:
DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
.Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));
System.Data.DataSetExtensions
để tham khảo và using System.Linq;
sử dụng lớp
DataTable.Select
cú pháp cũ bị hạn chế trong khi LINQ có thể sử dụng khuôn khổ .NET đầy đủ hoặc các phương thức tùy chỉnh. Vì vậy, chỉ khi bạn đang mắc kẹt với NET 2 bạn nên sử dụng DataTable.Select
, nếu không tôi sẽ luôn luôn thích LINQ
tbl.Select()
nó nhanh hơn đáng kể so với các cách tiếp cận khác.
DataRow rw = table.AsEnumerable().FirstOrDefault(tt => tt.Field<string>("Author") == "Name");
if (rw != null)
{
// row exists
}
thêm vào mệnh đề sử dụng của bạn:
using System.Linq;
và thêm:
System.Data.DataSetExtensions
đến tài liệu tham khảo.
Bạn có thể sử dụng phương thức DataTable.Select () . Bạn có thể cho chúng tôi nó như thế này.
if(myDataTable.Select("Author = '" + AuthorName.Replace("'","''") + '").Length > 0)
...
Chức năng Select () trả về một mảng DataRows cho các kết quả khớp với câu lệnh where.
bạn có thể đặt cơ sở dữ liệu là IEnumberable và sử dụng linq để kiểm tra xem các giá trị có tồn tại hay không. kiểm tra liên kết này
Truy vấn LINQ trên Datatable để kiểm tra xem bản ghi có tồn tại không
ví dụ được đưa ra là
var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...
bạn có thể bổ sung ở đâu với bất kỳ
table.Any(t => t.Author == author);