gpt4 book ai didi

C# linq 包含前后位置

转载 作者:可可西里 更新时间:2023-11-01 08:23:11 26 4
gpt4 key购买 nike

在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 之后使用 include,在 where 之前使用第二个查询,但结果是相同的。另外如何查看实际的 sql 查询?在这种特殊情况下,性能是我的主要目标,我可以改进查询吗?我需要更改两个属性:UserQuizes 属性和 UserQuizes-> VerbalQuizes-> Question 属性。

将它拆分为两个查询或按原样使用它会更好吗

最佳答案

您经常展示的指令顺序不会对 EF 或 LINQ to SQL 产生影响。查询构建器将您的整个 LINQ 语句转换为抽象逻辑表示,然后另一遍将逻辑结构转换为 SQL 语句。所以 WHERE 谓词都将在同一个地方结束。 First() 中的谓词只是被推到 WHERE 子句中。 Include 语句也会累积并投影到 JOIN 以包含生成包含的实体所需的额外列。

因此,简短的回答是,无论您构建 LINQ 语句的顺序如何,EF 通常都会生成最合乎逻辑的 SQL 语句。如果您需要进一步调整它,您应该查看一个存储过程,您可以在其中手工制作 SQL。

关于C# linq 包含前后位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35685069/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com