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, AcceptChangesyalnı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, AcceptChangesmanuel 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.Deletedbir 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 Selectişlevini çağırarak, sorgumuz DataTable'da önceden silinmiş girişleri otomatik olarak önler. Ve Selectiş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