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?

valterriann.dll
sumber
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"));
Tim Schmelter
sumber
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;
mservidio.dll
sumber
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.

Antonio Bakula
sumber
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.

Kibbee
sumber
0

Anda dapat mengatur database sebagai IEnumberable dan menggunakan linq untuk memeriksa apakah nilainya ada. lihat tautan ini

LINQ Query on Datatable untuk memeriksa apakah record ada

contoh yang diberikan adalah

var dataRowQuery= myDataTable.AsEnumerable().Where(row => ...

Anda bisa melengkapi mana dengan apapun

Blast_dan
sumber