Periksa apakah ada nilai di dataTable?


92

Saya memiliki DataTable dengan dua kolom Penulis dan Nama Buku .

Saya ingin memeriksa apakah Author nilai string yang diberikan sudah ada di DataTable. Apakah ada metode bawaan untuk memeriksanya, seperti untuk Array array.contains?


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

Jawaban:


206

Anda dapat menggunakan LINQ-to-DataSetdengan Enumerable.Any:

String author = "John Grisham";
bool contains = tbl.AsEnumerable().Any(row => author == row.Field<String>("Author"));

Pendekatan lain adalah dengan menggunakan DataTable.Select:

DataRow[] foundAuthors = tbl.Select("Author = '" + searchAuthor + "'");
if(foundAuthors.Length != 0)
{
    // do something...
}

T: Bagaimana jika kita tidak mengetahui header kolom dan ingin mengetahui apakah ada nilai sel PEPSIdi kolom row'c? Saya dapat mengulang semuanya untuk mencari tahu tetapi adakah cara yang lebih baik? -

Ya, Anda dapat menggunakan kueri ini:

DataColumn[] columns = tbl.Columns.Cast<DataColumn>().ToArray();
bool anyFieldContainsPepsi = tbl.AsEnumerable()
    .Any(row => columns.Any(col => row[col].ToString() == "PEPSI"));

Tambahkan ini System.Data.DataSetExtensionske referensi dan using System.Linq;menggunakan kelas
5377037

Dari kedua solusi tersebut, mana yang lebih cepat?
Paul Alexander

1
@PaulAlexander: tidak ada perbedaan besar. Tetapi DataTable.Selectsintaks lama terbatas sedangkan LINQ dapat menggunakan kerangka kerja .NET penuh atau metode khusus. Jadi hanya jika Anda terjebak dengan NET 2 Anda harus menggunakan DataTable.Select, jika tidak saya akan selalu lebih suka LINQ
Tim Schmelter

Jika Anda peduli dengan kinerja dan memiliki kumpulan data yang besar, tbl.Select()secara dramatis lebih cepat daripada pendekatan lainnya.
HerrimanCoder

@TimSchmelter - Tim Hebat. Tetapi jika pengguna tidak tahu nama kolom tetapi masih ingin mendapatkan semua baris yang cocok dengan nilai pencarian, bagaimana cara melakukannya?
Chandan Kumar

13

Anda bisa menggunakan Linq. Sesuatu seperti:

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
}

tambahkan ke klausa penggunaan Anda:

using System.Linq;

dan tambahkan :

System.Data.DataSetExtensions

untuk referensi.


5

Anda harus dapat menggunakan metode DataTable.Select () . Anda dapat menggunakannya seperti ini.

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

Fungsi Select () mengembalikan larik DataRows untuk hasil yang cocok dengan pernyataan where.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.