Linq с дополнительными пунктами Where и Sql Server CE - PullRequest
5 голосов
/ 28 февраля 2011

У меня есть форма поиска с необязательным полем «Имя пользователя».Если имя пользователя не указано, должны быть возвращены все совпадения.

Я использую Linq и Sql Server CE 4.0.

Код linq выглядит следующим образом ->

from p in context.Accounts
where (name==string.Empty || p.UserName.Contains(name))

При использовании Sql Server CE выдается следующая ошибка

"Параметр не разрешен в этом месте. Убедитесь, что знак '@' находится в допустимом месте или что параметры в этом месте вообще допустимыSQL-выражение. "

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

К вашему сведению следующее

from p in context.Accounts
where (string.IsNullOrEmpty(name) || p.UserName.Contains(name))

дает мне ошибку

"Указанное значение аргумента для функции недопустимо. [Аргумент # = 1, Имя функции (если известно) = isnull]"}

Это связано с тем, что Sql Server CE не поддерживает IsNull,Я просто делаю следующее, если параметр Name имеет значение Null.

if (name == null)
    name = string.Empty;

1 Ответ

9 голосов
/ 28 февраля 2011

Попробуйте это:

var query = from p in context.Accounts
            select p;

if (!string.IsNullOrEmpty(name)) {
    query = query.Where(p => p.UserName.Contains(name));
}

Нет правила, согласно которому запрос должен быть в одном выражении. Вы можете добавить к существующему запросу до момента, когда вы фактически его выполните.

...