String.IsNullOrEmpty в LINQ К запросу SQL?
Мой DBML предоставляет набор записей с нулевым полем nvarchar. Это нулевое поле nvarchar представляется в виде строки в моем коде С#.
Иногда это поле имеет значение NULL, иногда это пустая строка, а иногда имеет значение.
Работает ли String.IsNullOrEmpty()
в LINQ To SQL? Например, будет ли следующая работа:
var results = from result in context.Records
where String.IsNullOrEmpty(result.Info) == false
select result;
Ответы
Ответ 1
Любопытно, что для MSDN String.IsNullOrEmpty
поддерживается (в силу его неподдерживания), но я могу только жаловаться на него не поддерживается.
Однако, если он работает, вы не должны явно сравнивать его с логическим значением:
var results = from result in context.Records
/*XXX broke :( where !String.IsNullOrEmpty(result.Info) */
where !(result.Info == null || result.Info.Equals(""))
select result;
Ответ 2
Я не знаю, работает ли это, но я уверен, что это делает:
where (result.Info ?? "") != ""
(настоятельно рекомендую, чтобы генераторы запросов могли запутаться без них)
Ответ 3
Он не поддерживается, поскольку попытка его использования приводит к тому, что NotSupportedException
создается с этим сообщением:
Метод 'Boolean IsNullOrEmpty (System.String)' не поддерживает перевод на SQL.
Вместо этого вы можете использовать этот подход, чтобы сделать то же самое:
var results = from result in context.Records
where result.Info != null && result.Info.Length > 0
select result;
Вы также можете использовать result.Info != String.Empty
вместо проверки длины. Оба подхода будут работать.
Ответ 4
У меня были проблемы со всеми ответами за исключением ответа @ahmad-mageed.
Завершается использованием более краткого синтаксиса:
where (result.Info ?? "").Length > 0
Или же
result => (result.Info ?? "").Length > 0
Ответ 5
Вы можете использовать функцию в качестве аргумента для метода Where, если вы используете запрос Linq, например
var results = context.Records.Where(string.IsNullOrEmpty);
Но в этом случае это даст вам все нулевые или пустые элементы, а не наоборот. Затем создайте метод расширения для класса string (например, string.IsNotNullOrEmpty) или сделайте что-то вроде этого:
var results = context.Records.Except(context.Records.Where(string.IsNullOrEmpty));