Soru DataRowCollection'ı DataRow [] 'a dönüştürün


DataRowCollection örneğini DataRow [] öğesine dönüştürmenin en iyi performans yolu nedir?


44
2017-10-22 19:31


Menşei




Cevaplar:


DataRow[] rows = dt.Select();

Veritabanına hala erişebileceğinizi varsayalım.


90
2017-10-22 19:47



En basit cevap ve doğru. Kabul edilen cevap olarak işaretlenmelidir. Bu soru şimdi 3.500 kez görüntülendi! - Stephen Hosking
Agreed Javaman59, gözden geçirilmek üzere bir moderatör için soru işaretledim. - si618


Bütünlük adına, bu başka bir yoldur (Linq ile) ve satır sıralamasını koru:

DataRow[] rows = dt.Rows.Cast<DataRow>().ToArray()

13
2018-04-23 14:25





Bu belli ki, ama:

DataRowCollection.CopyTo(DataRow[] array, Int32 offset) ?

Ne olursa olsun, koleksiyonu yinelemek zorunda kalacaksınız (CopyTo, dahili DataRowTree öğelerini tekrarlar).

Umumi olmayan bir ağaca erişmek için yansıma kullanabileceğinizi, ancak önemli bir maliyetle yapabileceğinizi varsayalım.


5
2017-10-22 19:46





İçeren tabloya erişiminiz yoksa, uzantı yöntemini kullanabilirsiniz:

public static class DataRowCollectionExtensions
{
    public static IEnumerable<DataRow> AsEnumerable(this DataRowCollection source)
    {
        return source.Cast<DataRow>();
    }
}

Ve bundan sonra:

DataRow[] dataRows = dataRowCollection.AsEnumerable().ToArray();

Ancak, içeren tabloya erişiminiz varsa, satırlara erişmek daha iyidir. DataTable'ler AsEnumerable uzatma yöntemiAçıklama, Kaynak):

DataRow[] dataRows = dataTable.AsEnumerable().ToArray();

Her iki şekilde de kullanabilirsiniz DataTable'ler Select birkaç aşırı yükleme yöntemi (Açıklama, Kaynak):

DataRow[] dataRows = dataTable.Select();

4
2017-08-27 15:47