Linq包括替代品

时间:2018-02-01 15:34:18

标签: c# linq

我是从数据库加载一个实体,如此

    var profileEntity = await Context.Profiles
                                     .Include(x => x.MedicalRecords)
                                     .Include(x => x.DrugHistory)
                                     .Include(x => x.EmploymentStatus)
                                     .SingleOrDefaultAsync(x => x.Id == id);

一切正常,我只是想知道是否有更好的方法来包含其非泛型类型属性,而不是使用Include method,因为这个特定实体有很多我需要包含的属性

2 个答案:

答案 0 :(得分:0)

一种选择是考虑通过使它们不是虚拟来关闭那些特定导航属性的延迟加载。以下示例来自MSDN页面。

public class Blog 
{  
    public int BlogId { get; set; }  
    public string Name { get; set; }  
    public string Url { get; set; }  
    public string Tags { get; set; }  

    public ICollection<Post> Posts { get; set; }  
}

请参阅此link标题为关闭特定导航属性的延迟加载的部分以供参考。

答案 1 :(得分:0)

无法自动急切加载这些属性(Mechanism for statically defining eager loading for navigation properties),但您可以为此创建可重用的扩展方法:

public static IQueryable<Profile> IncludeAll(this IQueryable<Profile> query)
{
     return query.Include(x => x.MedicalRecords)
                 .Include(x => x.DrugHistory)
                 .Include(x => x.EmploymentStatus);
}

可以通过以下方式使用:

var profileEntity = Context.Profiles.IncludeAll().SingleOrDefault(x => x.Id == id);