Kiểm tra xem giá trị có tồn tại trong dataTable không?


91

Tôi có DataTable với hai cột Tác giả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.containskhông?


8
LINQ? table.Any(t => t.Author == author);
Davio

Câu trả lời:


206

Bạn có thể sử dụng LINQ-to-DataSetvớ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 PEPSItồ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"));

Thêm những System.Data.DataSetExtensionsđể tham khảo và using System.Linq;sử dụng lớp
5377037

Trong số hai giải pháp, giải pháp nào sẽ nhanh hơn?
Paul Alexander

1
@PaulAlexander: không có sự khác biệt lớn. Nhưng DataTable.Selectcú 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
Tim Schmelter

Nếu bạn quan tâm đến hiệu suất và có bộ dữ liệu lớn, tbl.Select()nó nhanh hơn đáng kể so với các cách tiếp cận khác.
HerrimanCoder

@TimSchmelter - Tim tuyệt vời. Nhưng nếu người dùng không biết tên cột nhưng vẫn muốn nhận được tất cả các hàng phù hợp với giá trị tìm kiếm thì có thể thực hiện như thế nào?
Chandan Kumar

13

Bạn có thể sử dụng Linq. Cái gì đó như:

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

8
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.


5

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.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.