C# 性能。包括在LINQ中

C# 性能。包括在LINQ中,c#,linq,entity-framework-6,C#,Linq,Entity Framework 6,考虑到速度,哪一个更有效 这个: var studentWithBatchName = db.Student.AsNoTracking() .Include(c => c.Department) .Include(c => c.Department.Section) .Include(c => c.Department.Section.Batch) .Select(c => c.Name, c.

考虑到速度,哪一个更有效

这个:

var studentWithBatchName = 
      db.Student.AsNoTracking()
        .Include(c => c.Department)
        .Include(c => c.Department.Section)
        .Include(c => c.Department.Section.Batch)
        .Select(c => c.Name, c.Department.Section.Batch.Name);
或者这个:

var studentWithBatchName = 
      db.Student.AsNoTracking()
        .Include(c => c.Department.Section.Batch)
        .Select(c => c.Name, c.Department.Section.Batch.Name);

Include语句只是从相关的数据源/表中获取数据。如果您说Includec=>c.Department.Section.Batch,则会得到.Department.Section.Batch值

如果您使用的是.Includec=>c.Department.Includec=>c.Department.Section.Includec=>c.Department.Section.Batch
理论上,它将向查询中添加3个连接。我不知道.NET是否捕捉到了这些情况,但是我只考虑在需要这个值时只使用CIECIE= C.Addio.St.T批量。而不是使用Include,它的作用类似于外部联接,使您的查询变大,从而在您可以使用的服务器上增加负载。ProjectTo

我可以通过 使用AutoMapper.QueryableExtensions


例如,var response=wait db.TableName.ProjectTo.ToListAsync

请在你的问题上多加努力。比如标记。这也是一个反问句。您可以测量它。@J.vanLangen我刚刚提交了一个关于格式的编辑。没有区别,因为您传入的lambada是一个表达式树,而不是一个委托。也就是说,它将转换为SQL语句,而不是立即编译和调用。EF和linq to SQL都会生成SQL语句来检索转换为类的数据。您的问题不清楚,您需要数据库速度吗?你在班上担心吗?不同的查询可以从表索引和统计信息中提高数据库速度。我建议您使用探查器查看在这两种情况下执行的实际查询,并检查其速度..Selectc=>c.Name,c.Department.Section.Batch.Name不是有效的c构造。但是假设它是一个普通的投影方法Selectc=>new{…},没有什么区别,因为在投影查询中,Include被忽略了。我猜即使在single.Include中,也需要三个连接?假设学生记录只有一个DepartmentId,而没有直接的BatchId,那么您仍然需要通过department查找批次。