Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以使用';包括';加载查询元素的步骤_C#_Entity Framework_Linq - Fatal编程技术网

C# 我可以使用';包括';加载查询元素的步骤

C# 我可以使用';包括';加载查询元素的步骤,c#,entity-framework,linq,C#,Entity Framework,Linq,我有一个c#类Person和Note,它们映射到Sql Server表并与实体框架一起使用。在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; }

我有一个c#类
Person
Note
,它们映射到Sql Server表并与实体框架一起使用。在
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))

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

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


但这里不返回任何实体类型。因此,急于或懒散地加载是无关紧要的。

谢谢。这正是我所想的,但一位同事向我保证,他见过在省略“include”时执行多个sql查询的实例。他说,我们应该总是明确使用“include”,以防万一,所以我想在这里问一下。也许他看到了一个更复杂的查询或ef?@jonaglon的旧版本,许多查询的情况是,您在一组结果上迭代,查看一个延迟加载的属性,并在循环中每次看到一个额外的查询(从而得到1+n个查询)。