Подтвердить что ты не робот

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;
4b9b3361

Ответ 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));