这两个linq表达式在功能上是等价的吗?

Ced*_*icB 7 c# linq

是否有任何功能差异:

if (photos.Any(it => it.Archived))
Run Code Online (Sandbox Code Playgroud)

和

if (photos.Where(it => it.Archived).Any())
Run Code Online (Sandbox Code Playgroud)

如果是这样,是否有更令人信服的理由使用一个而不是另一个?

Mar*_*ers 8

从功能上讲,他们做同样的事情.性能取决于特定的提供程序,但是例如在LINQ to SQL中,两种形式都生成完全相同的SQL:

SELECT 
    (CASE 
        WHEN EXISTS(
            SELECT NULL AS [EMPTY]
            FROM [dbo].[photos] AS [t0]
            WHERE [t0].[Archived] = 1
            ) THEN 1
        ELSE 0
     END) AS [value]
Run Code Online (Sandbox Code Playgroud)

如果我必须选择一个,我会使用第一个选项,因为它似乎对我来说更加清晰.