2016-04-10 16 views
0

Şu anda DateTime sütunu içeren bir veri tabanından belirli satırları seçiyorum. Fikir, bu belirli satırları topladıktan sonra silmektir.Belirli bir DateTime sütun satırlarını DataTable'dan silme

EnumerableRowCollection<DateTime?> dates = 
    dataSet.Tables[0].AsEnumerable() 
    .Select(r => r.Field<DateTime?>(dateColumn)) 
    .Where((r => r < minDate || r > maxDate)); 

ben nasıl ben aslında Veri kümesi/DataTable bu satırları silerim, bir RowCollection satırları alıyorum? Ya da belki de bunu yapmanın daha iyi bir yolu.

+0

Neden sadece satırlar arasında dolaşıp 'table.Rows.Remove 'çağırmak (..'? –

+0

Sizin deyiminiz DateTime column_ içeren bir datatable açıklamasının yapılması gerekir. Bu durumda tablonuz bir DateTime sütunu içermiyor? – Steve

+0

Bazı sütunlar ile bir veritabam var ve ben bir tane datetime sütunu olan bir veritabam var. Tabloda çok sayıda satır var, belirli satırların datetime değerine bağlı olarak bazı satırların silinmesi gerekiyor – Vinnie418

cevap

2

Veri tabanındaki bir satırı silmek için bazı işlemler yapmanız gerekir.

İlk silindi olarak

var rowsToDelete = dataSet.Tables[0].AsEnumerable() 
        .Where(r => r.Field<DateTime?>(dateColumn) < minDate || 
           r.Field<DateTime?>(dateColumn) > maxDate)); 

Şimdi her satırı işaretleme başlamak kriterlerinizle eşleşen tüm satırları bulmak. silinmiş olarak önceki adım işaretleri yalnızca satır, satır datatable hala ama artık erişilebilir (Ve RowState == DataRowState.Deleted içeren bir satır kullanmaya çalışıyor olduğunu

foreach(DataRow row in rowsToDelete) 
    row.Delete(); 

Bildirim istisna neden olur)

Şimdi Ayrıca, bu kod veritabanı tablosu üzerinde bir şey değişmez unutmayın ama sadece hafızada da içinde değişiklikler yapar DataTable

dataSet.Tables[0].AcceptChanges(); 

arayarak bu satırları kaldırmak olabilir taTable. Eğer veritabanı tablosundan satırları kaldırmak istiyorsanız, o zaman veritabanınız için özel bir ADO.NET koduna ihtiyacınız var - Örneğin Sql Server'da bir toplu silme için SqlDataAdapter.Update yöntemini veya tek SqlCommand dizisini çağırmalısınız. Silinecek satırın her biri için uygun DELETE ifadesi.

+0

Tatlı, bu kusursuz çalıştı Özellikle AcceptChanges() ile. – Vinnie418

İlgili konular