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?
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? -
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?
table.Any(t => t.Author == author);
Jawaban:
Anda dapat menggunakan
LINQ-to-DataSet
denganEnumerable.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... }
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"));
sumber
System.Data.DataSetExtensions
ke referensi danusing System.Linq;
menggunakan kelasDataTable.Select
sintaks lama terbatas sedangkan LINQ dapat menggunakan kerangka kerja .NET penuh atau metode khusus. Jadi hanya jika Anda terjebak dengan NET 2 Anda harus menggunakanDataTable.Select
, jika tidak saya akan selalu lebih suka LINQtbl.Select()
secara dramatis lebih cepat daripada pendekatan lainnya.Anda bisa menggunakan Linq. Sesuatu seperti:
bool exists = dt.AsEnumerable().Where(c => c.Field<string>("Author").Equals("your lookup value")).Count() > 0;
sumber
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 :
untuk referensi.
sumber
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.
sumber
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
sumber