将数据网格所选项目转换为我的对象类型



我正试图从数据库中删除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"的错误:

无法将<>f__AnonymousType1'3[System.Int32,System.String,System.String]类型的对象强制转换为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;

您的数据源"resultServices"不是IT_Service类型,它是anonymous type,无法转换为IT_Service

一种选择是从网格中读取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();
                }                
            }

最新更新