Мой 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;
Любопытно, что в соответствии с 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;
Это не поддерживается, поскольку попытка его использования приводит к выдаче 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
вместо проверки длины. Оба подхода будут работать.
Вы можете использовать функцию в качестве аргумента для метода Where, если вы используете запрос Linq, например
var results = context.Records.Where(string.IsNullOrEmpty);
Но в этом случае это даст вам все нулевые или пустые элементы, а не наоборот. Затем создайте метод расширения для класса string (например, string.IsNotNullOrEmpty) или сделайте что-то вроде этого:
var results = context.Records.Except(context.Records.Where(string.IsNullOrEmpty));