我想知道接下来的事情:
我可以使用 LINQ To Entities 查询我的数据库,如下所示:
GetAll().Where(
x => x.SomeProperty == 'Yes'
&& x.SomeOtherProperty == 'No')
.ToList();
Run Code Online (Sandbox Code Playgroud)
虽然我看到我的一些同事更改了这两个 WHERE 子句,如下所示:
GetAll().Where(x => x.SomeProperty == 'Yes')
.Where(x.SomeOtherProperty == 'No')
.ToList();
Run Code Online (Sandbox Code Playgroud)
两个查询都应该产生相同的输出,但我想知道这两个查询中的一个是否有任何优点/缺点。例如,一种方法会产生较慢的数据库查询,还是会产生相同的 sql 查询?
Asa*_*din 10
我设置使用模型中的测试项目和上下文中描述本文以及记录的SQL两个不同的查询,按照你的问题的模式。我提出的问题是:
db.Blogs
.Where(b => b.BlogId == 0)
.Where(b => b.Name == "Foo");
Run Code Online (Sandbox Code Playgroud)
和
db.Blogs
.Where(b => b.BlogId == 0 && b.Name == "Foo");
Run Code Online (Sandbox Code Playgroud)
为两个查询生成的 SQL 是相同的:
SELECT
[Extent1].[BlogId] AS [BlogId],
[Extent1].[Name] AS [Name]
FROM [dbo].[Blogs] AS [Extent1]
WHERE (0 = [Extent1].[BlogId]) AND (N'Foo' = [Extent1].[Name])
Run Code Online (Sandbox Code Playgroud)
所以看起来(至少对于像这样的简单情况),以一种或另一种方式没有显着的性能差异。我想您可能会争辩说,如果您使用多种Where方法,则表达式访问者需要更长的时间来检查您的树,但从长远来看,这可以忽略不计。