C# linq 包括前后位置
本文关键字:位置 包括前 linq | 更新日期: 2023-09-27 18:36:33
在linq中,两者之间有区别吗:
EFDbContext _db = new EFDbContext();
1)_db.UserQuizes
.Where(uq => uq.UserId == currentUserId && uq.QuizId == quizId)
.Include(qz => qz.Quiz.VerbalQuizes.Select(q => q.Question)).First()
2)_db.UserQuizes
.Include(qz => qz.Quiz.VerbalQuizes.Select(q => q.Question))
.Where(uq => uq.UserId == currentUserId && uq.QuizId == quizId).First()
3)_db.UserQuizes
.Include(qz => qz.Quiz.VerbalQuizes.Select(q => q.Question))
First(uq => uq.UserId == currentUserId && uq.QuizId == quizId)
请注意,第一个查询在 where 之后使用包含,在 where 之前使用第二个查询,但结果是相同的。 还有如何查看实际的sql查询?在这种特殊情况下,性能是我的主要目标,我可以改进查询吗?我需要更改两个属性:UserQuizes属性和UserQuizes-> VerbalQuizes-> Question属性。
最好将其拆分为两个查询还是按原样使用它
像您经常显示的那样对指令进行排序不会对 EF 或 LINQ to SQL 产生影响。查询生成器将整个 LINQ 语句转换为抽象逻辑表示形式,然后另一个传递将逻辑结构转换为 SQL 语句。因此,WHERE
谓词都将在同一个地方结束。First()
内的谓词只是被推到WHERE
子句。Include
语句也会累积并投影到 JOIN
s,以包含生成包含的实体所需的额外列。
因此,简短的回答是,EF 通常会生成最合乎逻辑的 SQL 语句,而不管构造 LINQ 语句的顺序如何。如果需要进一步调整它,则应查看可在其中手动创建 SQL 的存储过程。