Burada doğru cevabın çeşitli parçalarını ve parçalarını görüyorum, ancak hepsini bir araya getirip birkaç şeyi açıklamama izin verin.
Her şeyden önce, AcceptChanges
yalnızca bir tablodaki tüm işlemin doğrulanmış ve gerçekleştirilmiş olarak işaretlenmesi için kullanılmalıdır. Bu, DataTable'ı örneğin bir SQL sunucusuna bağlanmak için bir DataSource olarak kullanıyorsanız, AcceptChanges
manuel olarak çağırmanın değişikliklerin hiçbir zaman SQL sunucusuna kaydedilmeyeceğini garanti edeceği anlamına gelir .
Bu konuyu daha kafa karıştırıcı kılan şey, aslında istisnanın fırlatıldığı iki durum olması ve ikisini de önlememiz gerektiğidir.
1. Bir IEnumerable Koleksiyonunu Değiştirme
Numaralandırılan koleksiyona bir dizin ekleyemeyiz veya kaldıramayız çünkü bunu yapmak, numaralandırıcının dahili indekslemesini etkileyebilir. Bunu aşmanın iki yolu vardır: ya bir for döngüsünde kendi indekslemenizi yapın ya da numaralandırma için ayrı bir koleksiyon (değiştirilmemiş) kullanın.
2. Silinmiş bir Girdiyi Okumaya Çalışmak
DataTables işlem koleksiyonları olduğundan, girişler silinmek üzere işaretlenebilir ancak yine de numaralandırmada görünebilir. Bu, sütun için silinmiş bir giriş sorarsanız, "name"
bir istisna atacağı anlamına gelir . Bu, dr.RowState != DataRowState.Deleted
bir sütunu sorgulamadan önce kontrol etmemiz gerektiği anlamına gelir .
Hepsini bir araya koy
Dağınık olabilir ve hepsini manuel olarak yapabiliriz veya DataTable'ın bizim için tüm işi yapmasına ve aşağıdakileri yaparak ifadenin daha çok bir SQL çağrısı gibi görünmesine ve daha çok SQL çağrısına benzemesine izin verebiliriz:
string name = "Joe";
foreach(DataRow dr in dtPerson.Select($"name='{name}'"))
dr.Delete();
DataTable'ın Select
işlevini çağırarak, sorgumuz DataTable'da önceden silinmiş girişleri otomatik olarak önler. Ve Select
işlev bir eşleşme dizisi döndürdüğünden, üzerinde numaralandırdığımız koleksiyon çağırdığımızda değiştirilmez dr.Delete()
. Ayrıca, kodu gürültülü hale getirmeden değişken seçimine izin vermek için dize enterpolasyonu ile Select ifadesini de renklendirdim.
[ii]
To[i]
:-) Ancak