我已经制作了一个通用的扩展方法,它对对象执行一个动作,然后返回该对象:
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));
答案 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 */);