В целях запроса EF linq, First (c => cond) эквивалентно Where (c => cond) .First ()? - PullRequest
3 голосов
/ 19 августа 2011

Есть ли какие-то скрытые тонкости, один из них предпочтен, или один просто более короткий способ написать другой?

Client = db.Clients.First(c=>c.Name == "Client 1")

и

Client = db.Clients.Where(c=>c.Name == "Client 1").First()

Ответы [ 2 ]

5 голосов
/ 20 августа 2011

Да, они эквивалентны.

Просто протестируйте его, чтобы добавить их в LINQPad и просмотреть сгенерированные операторы Sql, и в моей базе данных я получу точно такие же сгенерированные запросы.

Обновление:

Ниже приведен пример запросов к моей базе данных.

-- Region Parameters
DECLARE @p0 VarChar(1000) = 'SKY02'
-- EndRegion
SELECT TOP (1) [t0].[MST_SQ], [t0].[EMP_EMPNO]
FROM [EMPLOYEE] AS [t0]
WHERE [t0].[EMP_EMPNO] = @p0
GO

-- Region Parameters
DECLARE @p0 VarChar(1000) = 'SKY02'
-- EndRegion
SELECT TOP (1) [t0].[MST_SQ], [t0].[EMP_EMPNO]
FROM [EMPLOYEE] AS [t0]
WHERE [t0].[EMP_EMPNO] = @p0
2 голосов
/ 20 августа 2011

Я бы сказал, что первое предпочтительнее просто потому, что оно короче - если вы знаете, для чего нужен аргумент. Но да, они должны быть эквивалентны - они эквивалентны в «модели мира LINQ», так сказать:)

Та же перегрузка "с предикатом" присутствует для различных других операторов LINQ - Any, Count, Last и т. Д. Лично я об этом забываю, но стоит помнить, если вы можете:)

...