我是否可以使用“包含”优化单个linq查询到预先加载的查询元素

时间:2018-03-01 13:24:02

标签: c# entity-framework linq

我有一个c#classes PersonNote,它们映射到Sql Server表并与Entity Framework一起使用。在Person数据模型中Note是延迟加载的:

public class Person {
    public int PersonId { get; set; }
    public int PersonType { get; set; }

    public int? NoteId { get; set; }
    public virtual Note Note { get; set; }
}

当我使用linq查询时,在查询开头显式使用Include是否有任何优势?这就是:

personCount = myContext.Person.Include(p => p.Note).Count(
    m => m.PersonType == 3 &&
    (m.Note.Expires == null || m.Note.Expires > DateTime.Now))

比这更有效:

personCount = myContext.Person.Count(
    m => m.PersonType == 3 &&
    (m.Note.Expires == null || m.Note.Expires > DateTime.Now))

1 个答案:

答案 0 :(得分:1)

在这种情况下,使用Include没有任何好处。

Include用于确保关联的链接实体类型被急切加载(而不是默认的延迟加载)。这避免了大量请求加载每个引用的实例(例如,在迭代集合时)。

但是你没有在这里返回任何实体类型。因此,急切或懒惰的加载是无关紧要的。