результат запроса, что я должен использовать Count () или Any () - PullRequest
0 голосов
/ 18 мая 2010

Я проверяю логин пользователя этим методом хранилища,

  public bool getLoginStatus(string emailId, string password)
    {
        var query = from r in taxidb.Registrations
                    where (r.EmailId == emailId && r.Password==password)
                    select r;
        if (query.Count() != 0)
        {
            return true;
        }
        return false;
    }

Я видел в одном из предыдущих вопросов !query.Any() будет быстрее ... Что мне использовать? Любое предложение ....

Ответы [ 2 ]

4 голосов
/ 18 мая 2010

Сгенерированный sql будет отличаться между двумя вызовами. Вы можете проверить, установив свойство context.Log в Console.Out или что-то в этом роде.

Вот что это будет:

SELECT COUNT(*) AS [value]
FROM [dbo].[Registrations] AS [t0]
WHERE [t0].[EmailId] = @p0 and [t0].Password = @p1

SELECT 
    (CASE 
        WHEN EXISTS(
            SELECT NULL AS [EMPTY]
            FROM [dbo].[Registrations] AS [t0]
            WHERE [t0].[EmailId] = @p0 and [t0].Password = @p1
            ) THEN 1
        ELSE 0
     END) AS [value]

В этом случае я сомневаюсь, что это будет иметь какое-либо значение, потому что EmailID, вероятно, является уникальным индексом, поэтому может быть только 1 результат. В другом случае, когда число может быть> 1, любой будет предпочтительнее, поскольку второй запрос позволяет серверу sql закорачивать поиск, поскольку ему нужно только найти один, чтобы доказать, что такой существует.

2 голосов
/ 18 мая 2010

Вы можете выразить это немного короче так:

return taxidb.Registrations.Any(r => r.EmailId == emailId && r.Password==password);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...