Eri*_* J. 24 linq-to-entities entity-framework
给定对象层次结构
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; }
}
Run Code Online (Sandbox Code Playgroud)
和DB上下文
public class MyContext : DbContext
{
public DbSet<Parent> Parents { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
可以包括使用Lambda语法(using System.Data.Entity)的子孙,如下所示:
using (MyContext ctx = new MyContext())
{
var hierarchy =
from p in ctx.Parents.Include(p => p.Child.GrandChild) select p;
}
Run Code Online (Sandbox Code Playgroud)
如果随后更改了类名,则Lambda语法可以防止破坏查询.但是,如果Parent有ICollection<Child>这样的话:
public class Parent
{
public int Id { get; set; }
public virtual ICollection<Child> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Lambda语法不再有效.相反,可以使用字符串语法:
var hierarchy = from p in ctx.Parents.Include("Children.GrandChild") select p;
Run Code Online (Sandbox Code Playgroud)
字符串语法是唯一的选择,还是在这种情况下有一些替代方法来使用Lambda语法?
Ger*_*old 35
当然,你可以做到
var hierarchy = from p in ctx.Parents
.Include(p => p.Children.Select(c => c.GrandChild))
select p;
Run Code Online (Sandbox Code Playgroud)
参见MSDN,标题备注,第五个项目符号.
小智 25
更新:如果您使用的是Entity Framework Core,则应使用以下语法
var hierarchy = from p in ctx.Parents
.Include(p => p.Children)
.ThenInclude(c => c.GrandChild)
select p;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7804 次 |
| 最近记录: |