Учитывая иерархию объектов
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; }
}
и контекст БД
public class MyContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
}
Можно включить детей и внуков с помощью синтаксиса лямбда (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; }
}
Синтаксис Lambda больше не работает. Вместо этого можно использовать строковый синтаксис:
var hierarchy = from p in ctx.Parents.Include("Children.GrandChild") select p;
Является ли синтаксис строки единственным вариантом или есть альтернативный способ использования синтаксиса лямбда в этой ситуации?