protected void BtnDelete_Click(object sender, EventArgs e)
    {
        DataContext context = new DataContext();
        Article articleinfo = new Article();
        string str = "";
        string[] ckb = null;
        str = base.Request.Form.Get("checkboxname");
        ckb = str.Split(new char[] { ',' });
        for (int i = 0; i < ckb.Length; i++)
        {
            ParameterExpression expression;
            articleinfo = context.JD_Article.Single<Article>(Expression.Lambda<Func<Article, bool>>(Expression.Equal(Expression.Property(expression = Expression.Parameter(typeof(Article), "c"), (MethodInfo)methodof(Article.get_id)), Expression.Call(null, (MethodInfo)methodof(Convert.ToInt32), new Expression[] { Expression.ArrayIndex(Expression.Constant(ckb), Expression.Constant(i)) })), new ParameterExpression[] { expression }));
            context.JD_Article.DeleteOnSubmit(articleinfo);
            JD_Tag entity = context.Tag.SingleOrDefault<Tag>(c => (c.tagClass == "a") && (c.tagId == articleinfo.id));
            if (entity != null)
            {
                context.Tag.DeleteOnSubmit(entity);
            }
            context.SubmitChanges();
        }
        logbll.add("delarticle", "删除文章,id为:" + str);
        base.Response.Redirect("ManageArticle.aspx");
    }红色字体处,正确的应该怎么写 ?

解决方案 »

  1.   

    导入 System.Data.Linq 以后再反编译。
      

  2.   

    在反编译之前,已事先导入System.Data.Linq了。
      

  3.   

    这是在构造 Lambda Expression Tree,感觉没什么问题啊。
      

  4.   

    编译通不过,错误:当前上下文不存在:methodof
      

  5.   

    翻译成普通的代码就是:articleinfo = context.JD_Article.Single(c => c.get_id==Convert.ToInt32(ckb[i]));就是把ckb数组的i项转成int型,把该条记录找出来。。(接着)执行删除简单解释下:context.JD_Article.Single<Article>:执行context.JD_Article.Single()括号中是构建lambda表达式,表达式的条件是Equal,即等于。。Expression.Parameter(typeof(Article), "c"),构建lambda表达式前面的c => .......Article.get_id,这是等号左边。Expression.Constant(ckb), Expression.Constant(i),这是等号右边。