2014-10-16 33 views
1

我真的卡住如何解決這個System.Data.DataRowCollection」不包含定義‘ToList’,沒有擴展方法‘ToList’接受第一個參數

public bool DeleteVegetationZone(ref Assessment objAssessment, int VegetationZoneIDToDelete, string UserFullname, ref string ErrorMessage) 
    { 
     string RowFilter = @"VegetationZoneID=" + Convert.ToString(VegetationZoneIDToDelete); 
     Assessment.tblVegetationZoneRow[] VegetationZoneRows = (Assessment.tblVegetationZoneRow[])objAssessment.tblVegetationZone.Select(RowFilter); 
     if ((VegetationZoneRows != null) && (VegetationZoneRows.Length != 0)) 
     { 
      if (VegetationZoneRows.Length == 1) 
      { 
       if (VegetationZoneRows[0].VegetationZoneID > 0) 
       { 
        VegetationZoneRows[0].UpdatedBySystemUser = UserFullname; 
        VegetationZoneRows[0].SaveType = (int)EnumCollection.SaveType.RemoveOnly; 
       } 
       else 
       { 
        VegetationZoneRows[0].Delete(); 
        objAssessment.AcceptChanges(); 
       } 

       //tblThreatenedSpeciesSubzone 

       var list = objAssessment.tblThreatenedSpeciesSubzone.Rows.ToList(); 
       for (int i = 0; i < objAssessment.tblThreatenedSpeciesSubzone.Count; i++) 
       { 

        foreach (Assessment.tblThreatenedSpeciesSubzoneRow ThreatenedSpeciesSubzoneRow in objAssessment.tblThreatenedSpeciesSubzone.Rows) 
        { 
         if (ThreatenedSpeciesSubzoneRow.VegetationZoneID == VegetationZoneIDToDelete) 
          DeleteThreatenedSpeciesSubzone(ref objAssessment, ThreatenedSpeciesSubzoneRow.ThreatenedSpeciesZoneID, UserFullname, ref ErrorMessage); 
        } 
       } 

       UpdateSpeciesGeoHabitatSurveyTime(ref objAssessment, UserFullname, ref ErrorMessage); 
      } 
      else 
      { 
       //Cannot have more than one row with same key 
       ErrorMessage = "Error: More than one record found - Vegetation zone ID = " + Convert.ToString(VegetationZoneIDToDelete); 
       return false; 
      } 
     } 
     else 
     { 
      //Must have at least one row with same key 
      ErrorMessage = "Error: Record not found - Vegetation zone ID = " + Convert.ToString(VegetationZoneIDToDelete); 
      return false; 
     } 
     return true; 
    } 

我有問題「tblThreatenedSpecies亞帶「刪除,它會拋出異常‘發生錯誤收集了修改;枚舉操作可能不會執行’

var list = objAssessment.tblThreatenedSpeciesSubzone.Rows.ToList(); 
      for (int i = 0; i < objAssessment.tblThreatenedSpeciesSubzone.Count; i++) 
      { 

       foreach (Assessment.tblThreatenedSpeciesSubzoneRow ThreatenedSpeciesSubzoneRow in objAssessment.tblThreatenedSpeciesSubzone.Rows) 
       { 
        if (ThreatenedSpeciesSubzoneRow.VegetationZoneID == VegetationZoneIDToDelete) 
         DeleteThreatenedSpeciesSubzone(ref objAssessment, ThreatenedSpeciesSubzoneRow.ThreatenedSpeciesZoneID, UserFullname, ref ErrorMessage); 
       } 
      } 

我試圖此基礎上改裝勸什麼你們,但現在我有不同的異常。

希望有人指導我在正確的道路上。

+0

您在使用ToList()時遇到問題,或者「出現錯誤:集合已被修改;枚舉操作可能不會執行」? – 2014-10-16 21:38:18

+0

ToList()遇到問題,我得到了更早的集合異常修改所以嘗試更改爲TOList – Usher 2014-10-16 21:39:32

+0

@Usher:我想你實際上是想在'foreach'中循環這個列表以防止「集合被修改」錯誤即使它目前沒有使用。 – 2014-10-16 22:02:47

回答

3

A DataRowCollection不實現泛型IEnumerable<DataRow>但只有非泛型ÌEnumerable接口。這就是爲什麼你不能直接在DataTable.Rows上使用LINQ擴展方法。您必須使用DataTabe.AsEnumerableRows.Cast<DataRow>

var list = objAssessment.tblThreatenedSpeciesSubzone.AsEnumerable().ToList(); 
+0

你是天才,我用下面的代碼解決了這個問題,以及以前的代碼@each(Assessment.tblThreatenedSpeciesSubzoneRow ThreatenedSpeciesSubzoneRow in objAssessment.tblThreatenedSpeciesSubzone.AsEnumerable()。ToList()) – Usher 2014-10-16 23:32:07

相關問題