オブジェクト階層が与えられた場合
public class Parent
{
public int Id { get; set; }
public virtual Child Child { get; set; }
}
public class Child
{
public int Id { get; set; }
public virtual GrandChild GrandChild { get; set; }
}
public class GrandChild
{
public int Id { get; set; }
}
およびDBコンテキスト
public class MyContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
}
次のように Lambda 構文 ( using System.Data.Entity
)を使用して、子と孫を含めることができます。
using (MyContext ctx = new MyContext())
{
var hierarchy =
from p in ctx.Parents.Include(p => p.Child.GrandChild) select p;
}
Lambda 構文は、クラス名が後で変更された場合にクエリが壊れないようにします。ただし、代わりに次のようなものParent
がある場合:ICollection<Child>
public class Parent
{
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
ラムダ構文は機能しなくなりました。代わりに、文字列構文を使用できます。
var hierarchy = from p in ctx.Parents.Include("Children.GrandChild") select p;
文字列構文が唯一のオプションですか、またはこの状況で Lambda 構文を使用する別の方法はありますか?