LINQ to SQL генерирует отрицательные условия в предложении WHERE - PullRequest
1 голос
/ 08 сентября 2010

Я использую LINQ to SQL для извлечения данных, используя логические условия (столбцы BIT в SQL). Мой запрос LINQ выглядит примерно так:

var query = from r in db.Requests
            select r;
query = query.Where(r => r.Completed == someBooleanVal);
query = query.Where(r => r.Cancelled == someOtherBool);
return query.ToList();

'Where ()' применяется другим способом, поэтому я добавляю его отдельно.

Когда логические значения заданы как ложные, сгенерированный SQL выглядит примерно так:

SELECT [t0].[col1], [t0].[col2], [t0].[col3], [t0].[etc]
FROM [dbo].[Requests] AS [t0]
WHERE (NOT(([t0].[Cancelled]) = 1) AND (NOT(([t0].[Completed]) = 1)

вместо того, что я бы использовал:

WHERE [t0].[Cancelled] = 0 AND [t0].[Completed] = 0

Это работает очень, очень медленно. Я сильно подозреваю, что это из-за отрицательных условий сгенерированных им логических значений (все выбранные столбцы покрываются индексом, а два столбца в предложении where имеют отдельный индекс).

Почему это порождает негативные условия? Как я могу это исправить?

1 Ответ

0 голосов
/ 22 июня 2012
var query = 
    from r in db.Requests.Where(r => r.Completed == someBooleanVal && r.Cancelled == someOtherBool)
    select r;

    return query.ToList();

Надеюсь, это поможет вам и хорошего дня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...