String.IsNullOrEmpty в запросе LINQ To SQL?

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

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

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

var results = from result in context.Records
              where String.IsNullOrEmpty(result.Info) == false
              select result;
24
задан p.campbell 8 November 2011 в 18:02
поделиться

3 ответа

Любопытно, что в соответствии с 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;
41
ответ дан 28 November 2019 в 22:34
поделиться

Это не поддерживается, поскольку попытка его использования приводит к выдаче 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
ответ дан 28 November 2019 в 22:34
поделиться

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

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

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

var results = context.Records.Except(context.Records.Where(string.IsNullOrEmpty));
0
ответ дан 28 November 2019 в 22:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: