2014-05-19 23 views
19

DataTable'im var.DataTable bir sütun değerleri listesi nasıl alınır?

DataTable dt = new DataTable(); 

dt.Columns.Add(new DataColumn("id", Type.GetType("System.Int32"))); 
dt.Columns.Add(new DataColumn("name", Type.GetType("System.String"))); 
// more columns here 

ben "id" değerlerinin listesi gerekir.

Linq olmadan benim DataTable ve tüm satırlar üzerinde döngü olmadan yapabilir mi?

Düzenleme: Zaten döngü kullanmaya karar

Sergei küçük tartışmalar sonrasında.

cevap

41

Sen DataTable'a Linq kullanabilirsiniz:

var ids = dt.AsEnumerable().Select(r => r.Field<int>("id")).ToList(); 

GÜNCELLEME: Not

List<int> ids = new List<int>(dt.Rows.Count); 
foreach(DataRow row in dt.Rows) 
    ids.Add((int)row["id"]); 

Linq

olmadan verimlilik için o row[index] yerine row[columnName] kullanmak daha iyidir. İlk önce sütun dizini dizinine göre sütun alır. İkincisi, iç dizinden, dizinleri dizinlere eşleyen sütun dizinini alır ve yalnızca sonra dizini dizin alarak alır.

Dikkat edilmesi gereken diğer bir nokta, listenin kapasitesini satır sayısıyla başlatmasıdır. Bunu yapmazsanız, dahili liste dizisi yeniden oluşturulacak ve birçok kez kopyalanacaktır (satır sayısına bağlı olarak).

Ve son söylenecek şey - büyük bir masala (örneğin mümkünse) en verimli yol, sunucu tarafında veriyi filtreliyor.

+1

@TimSchmelter uzatma yöntemleri C# 2? :) –

+0

İlk önce Linq, ikinci döngü ile. Bundan kaçınmak istediğim şey bu. – Kamil

+0

@Kamil Bahse girerim başlangıçta döngü sınırlaması yoktur. Döngülerde neyin yanlış olduğunu açıklayabilir misin? –

İlgili konular