データベースに親エンティティと子エンティティがあります。対応するエンティティのフィールドの一部のみを含むChildBriefオブジェクトとParentBriefオブジェクトとして、それぞれ親を持つ子の一部を取得する必要があります。したがって、ParentBriefとChildBriefは、基になるエンティティの一種のマップです。
私は書くことができます:
IQueriable<ChildBrief> result = Childs.Select(x => new ChildBrief
{
Id = x.Id,
Name = x.Name,
Parent = new ParentBrief
{
Id = x.Parent.Id,
Name = x.Parent.Name
}
});
そしてそれは完全に結果のSQLにコンパイルされます。しかし、ParentBriefマッパーを、ここのような他の場所で再利用できる別個の静的関数にしたいので、次のようにします。
IQueriable<ChildBrief> result = Childs.Select(x => new ChildBrief
{
Id = x.Id,
Name = x.Name,
Parent = mapper.Compile()(x.Parent)
});
private static readonly Expression<Func<Parent, ParentBrief>> mapper =
m => new ParentBrief
{
Id = x.Parent.Id,
Name = x.Parent.Name}
};
EF5は、メソッドまたはこのようなものを呼び出すことができないというエラーを発生させます(おそらくコンパイル段階で)。
単純な式(フラットマッピングのみ)をEFに挿入し、SQLに正しくコンパイルする方法はありますか?また、事前に実行せずにIQueryableの結果を取得したいと考えています。