LinqToSqlDataSource 中的自定义删除

Custom Deleting in LinqToSqlDataSource

我有一个绑定到 SqlToLinqDataSource 的 GridView。在我们的软件中,实体不会被物理删除,我们只将列“deletedFlag”设置为 true。

现在我想进入 DataSource 的删除事件并尝试通过这种方式进行自定义删除:

protected void LinqServerModeDataSourceNEU_Deleting(object sender, DevExpress.Data.Linq.LinqServerModeDataSourceEditEventArgs e)
    {
        if(Verband.verbandKuerzel.ToLower() == "wsv")
        {
            using (wsv.wsv2DataContext context = new wsv.wsv2DataContext())
            {
                foreach ( DictionaryEntry item in e.Keys)
                {
                    wsv.mitgliedschaft temp = (wsv.mitgliedschaft)context.mitgliedschaft.Where(x => x.id == int.Parse(item.Value.ToString()));
                    temp.deletedFlag = 1;
                }
                context.SubmitChanges();
            }
        }
        else if(Verband.verbandKuerzel.ToLower() == "wsb")
        {
            using (wsb.wsb2DataContext context = new wsb.wsb2DataContext())
            {
                foreach (DictionaryEntry item in e.Keys)
                {
                    wsb.mitgliedschaft temp = (wsb.mitgliedschaft)context.mitgliedschaft.Where(x => x.id == int.Parse(item.Value.ToString()));
                    temp.deletedFlag = 1;
                }
                context.SubmitChanges();
            }
        }
    }

但是我收到这个错误:

Das Objekt des Typs "System.Data.Linq.DataQuery`1[WebApplication_NEON.wsb.mitgliedschaft]" kann nicht in Typ "WebApplication_NEON.wsb.mitgliedschaft" umgewandelt werden.

谁能帮我看看我做错了什么?

IEnumerable.Where() 方法 returns 一个 IEnumerable<T> 对象(对象的集合)。

在您的情况下,您得到的是 IEnumerable<WebApplication_NEON.wsb.mitgliedschaft> 的实例,它没有 属性 deltedFlag,而不是 WebApplication_NEON.wsb.mitgliedschaft.[=18= 的实例]

您需要单独访问数据库中的每一行 -> 将 Where 更改为 Single

protected void LinqServerModeDataSourceNEU_Deleting(object sender, DevExpress.Data.Linq.LinqServerModeDataSourceEditEventArgs e)
{
    if(Verband.verbandKuerzel.ToLower() == "wsv")
    {
        using (wsv.wsv2DataContext context = new wsv.wsv2DataContext())
        {
            foreach ( DictionaryEntry item in e.Keys)
            {
                /* vvvvv line bellow vvvvv */
                wsv.mitgliedschaft temp = (wsv.mitgliedschaft)context.mitgliedschaft.Single(x => x.id == int.Parse(item.Value.ToString()));
                temp.deletedFlag = 1;
            }
            context.SubmitChanges();
        }
    }
    else if(Verband.verbandKuerzel.ToLower() == "wsb")
    {
        using (wsb.wsb2DataContext context = new wsb.wsb2DataContext())
        {
            foreach (DictionaryEntry item in e.Keys)
            {
            /* vvvvv line bellow vvvvv */]
                wsb.mitgliedschaft temp = (wsb.mitgliedschaft)context.mitgliedschaft.Single(x => x.id == int.Parse(item.Value.ToString()));
                temp.deletedFlag = 1;
            }
            context.SubmitChanges();
        }
    }
}