DataTable'da değer olup olmadığını kontrol edin.


92

Yazar ve Kitap adı olmak üzere iki sütun içeren DataTable'ım var .

Yazar dizesi değerinin DataTable'da zaten mevcut olup olmadığını kontrol etmek istiyorum . Diziler gibi, kontrol etmek için yerleşik bir yöntem var mı array.contains?


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

Yanıtlar:


206

Sen kullanabilirsiniz LINQ-to-DataSetile Enumerable.Any:

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

Başka bir yaklaşım kullanmaktır DataTable.Select:

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

S: Başlıklar sütunlarını bilmiyorsak ve PEPSIherhangi bir satırın c sütununda herhangi bir hücre değeri olup olmadığını bulmak istiyorsak ne olur ? Bulmak için hepsini döngüye sokabilirim ama daha iyi bir yol var mı? -

Evet, bu sorguyu kullanabilirsiniz:

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

Bunları System.Data.DataSetExtensionsreferansa ve using System.Linq;sınıf kullanmaya ekleyin
5377037

İki çözümden hangisi daha hızlı olurdu?
Paul Alexander

1
@PaulAlexander: Çok büyük bir fark yok. Ancak eski DataTable.Selectsözdizimi sınırlıdır, oysa LINQ tam .NET çerçevesini veya özel yöntemleri kullanabilir. Bu nedenle, yalnızca .NET 2'ye bağlıysanız kullanmalısınız DataTable.Select, aksi takdirde her zaman LINQ
Tim Schmelter'i

Performansı önemsiyorsanız ve büyük veri kümelerine sahipseniz tbl.Select(), diğer yaklaşımlardan önemli ölçüde daha hızlıdır.
HerrimanCoder

@TimSchmelter - Harika Tim. Ancak kullanıcı sütun adını bilmiyor ancak yine de arama değeriyle eşleşen tüm satırları almak istiyorsa, nasıl yapılabilir?
Chandan Kumar

13

Linq'i kullanabilirsiniz. Gibi bir şey:

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
}

kullanım maddenize ekleyin:

using System.Linq;

ve Ekle :

System.Data.DataSetExtensions

referanslara.


5

DataTable.Select () yöntemini kullanabilmeniz gerekir . Bizi böyle yapabilirsin.

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

Select () işlevi, where ifadesiyle eşleşen sonuçlar için bir DataRows dizisi döndürür.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.