我制作了一个通用的扩展方法,它对对象执行操作,然后返回对象:
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));
好吧,撇开赋值运算符不谈,您希望如何将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 */);