Linq与自定义泛型扩展方法一起构建错误 - 表达式树可能不包含赋值运算符?

时间:2012-02-22 15:05:20

标签: linq generics extension-methods

我已经制作了一个通用的扩展方法,它对对象执行一个动作,然后返回该对象:

    public static T Apply<T>(this T subject, Action<T> action)
    {
        action(subject);
        return subject;
    }

由于以下原因,我无法在EntityFramework Linq查询中使用此扩展方法:

表达式树可能不包含赋值运算符

为什么会这样?

Linq查询:

var parents = from p in context.Parent
               join phr in context.Child on p.key equals phr.parentkey
               into pr
               select p.Apply(
                      x => x.Children = //The assignment operator that fails to build...
                      pr.ToDictionary(y => y.childkey, y => y.childname));

1 个答案:

答案 0 :(得分:3)

那么,除了赋值运算符之外,您希望将Apply方法转换为SQL?实体框架对此一无所知,也无法深入研究不透明的代理。

我怀疑你真正需要做的是将数据库中的位与本地的位分开:

var dbQuery =  from p in context.Parent
               join phr in context.Child on p.key equals phr.parentkey into pr
               select new { p, phr };

var localQuery = dbQuery.AsEnumerable()
                        .Select(pair => /* whatever */);