String.IsNullOrEmpty в запросе LINQ To SQL? - PullRequest
24 голосов
/ 08 ноября 2011

Мой DBML предоставляет набор записей, который имеет обнуляемое поле nvarchar.Это nullable поле nvarchar представлено в виде строки в моем коде C #.

Иногда это поле пустое, иногда это пустая строка, а иногда оно действительно имеет значение.

Работает ли String.IsNullOrEmpty() в LINQ To SQL?Например, будет ли работать следующее:

var results = from result in context.Records
              where String.IsNullOrEmpty(result.Info) == false
              select result;

Ответы [ 5 ]

41 голосов
/ 08 ноября 2011

Любопытно, что для 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;
20 голосов
/ 08 ноября 2011

Я не знаю, работает ли это, но я уверен, что это работает:

where (result.Info ?? "") != ""

(настоятельно рекомендую парены, генератор запросов может запутаться без них)

4 голосов
/ 08 ноября 2011

Это не поддерживается, поскольку попытка его использования приводит к выдаче 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 вместо проверки длины. Оба подхода будут работать.

0 голосов
/ 04 апреля 2019

Вы можете использовать функцию в качестве аргумента для метода Where, если вы используете запрос Linq, например,

var results = context.Records.Where(string.IsNullOrEmpty);

Но в этом случае это даст вам все нулевые или пустые элементы вместо противоположных.Затем создайте метод расширения для класса string (например, string.IsNotNullOrEmpty) или сделайте что-то вроде этого:

var results = context.Records.Except(context.Records.Where(string.IsNullOrEmpty));
0 голосов
/ 17 декабря 2018

У меня были проблемы со всеми ответами, кроме ответа @ ahmad-mageed.

Завершено с использованием более краткого синтаксиса:

where (result.Info ?? "").Length > 0

или

result => (result.Info ?? "").Length > 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...