2016-05-07 6 views
0

データベースからDataGridで選択したエンティティを削除しようとしています。DataGridで選択したアイテムをオブジェクトタイプに変換する

using (var db = new MonitoringSystemContext()) 
{ 
    IT_Service selectedService = (IT_Service)ItServiceDataGrid.SelectedItem;    
    try 
    { 
     db.IT_Service.Remove(selectedService); 
     db.SaveChanges(); 
     MessageBox.Show("Successfully", "Success", MessageBoxButton.OK, MessageBoxImage.Information); 
    } 
    catch (Exception) 
    { 
     MessageBox.Show("Error", "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
    } 
    finally 
    { 
     UpdateDataGrids(); 
    }     
} 

しかし、私は型 'System.InvalidCastExceptionの' のエラーが表示されます。

Unable to cast object of type <>f__AnonymousType1'3[System.Int32,System.String,System.String] to type DAL.Entity.IT_Service .

は、このエラーで私を助けてください。データソース:おかげですべての答えを

UPD

var GetServices = from s in _context.IT_Service 
        join cat in _context.IT_Service_Category 
        on s.IT_Service_CategoryIT_Service_Category_ID equals cat.IT_Service_Category_ID 
        select new { 
         s.Service_ID, 
         s.Service_Name, 
         cat.IT_Service_Category_Name }; 
var resultServices = GetServices.ToList(); 
ItServiceDataGrid.ItemsSource = resultServices; 
+0

はあなたがデータソースを設定している方法を示しすることはできますか?これは、データソース型の問題であるようです。 – user3185569

+0

@ user3185569もちろん – Eluvium

答えて

0

データソース "resultServicesは" タイプIT_Serviceではありませんが、それはanonymous typeあり、それはIT_Service

に変換することができません1つの方法は、IDをグリッドから読み取り、データベースからIDを使用して要素を削除することです。

はこれを試してみてください:(あなたのケースでダイナミックを使用することは良い習慣ではないことに注意してください)

using (var db = new MonitoringSystemContext()) 
      { 
       dynamic selectedService = ItServiceDataGrid.SelectedItem;    
       try 
       { 
        int ID = selectedService.Service_ID; 
        var deletedService = db.IT_Service.FirstOrDefault(s=> s.Service_ID == ID); 
        if(deletedService != null) 
        { 
        db.IT_Service.Remove(deletedService); 
        db.SaveChanges(); 
        MessageBox.Show("Successfully", "Success", MessageBoxButton.OK, MessageBoxImage.Information); 
        } 
       } 
       catch (Exception) 
       { 
        MessageBox.Show("Error", "Error", MessageBoxButton.OK, MessageBoxImage.Error); 
       } 
       finally 
       { 
        UpdateDataGrids(); 
       }     
      } 
+0

「匿名型」ではなく「IT_Service」の型を返す方法はありますか? – Eluvium

+0

データソースを変更してIT_Serviceを入力しない限り、または動的タイプを使用して編集したばかりのソリューションを試すことができない限り、できません。 – user3185569

+0

解決策が機能しません。 '(s => s.Service_ID == selectedService.Service_ID)'にエラーが発生しました: '式ツリーに動的操作が含まれていない可能性があります。 ' – Eluvium

関連する問題