2016-02-04 2 views
0

Этот код прекрасно работает в среде SQL Server Management Studio:Передача пустой строки Ef6

SELECT [PassNumber] FROM [dbo].[Customers] WHERE [PassNumber] <> 'A' 

Этот код также работает, как ожидалось:

string query = "PassNumber <> 'A'"; 
DbSqlQuery<Customer> data = db.Customers.SqlQuery(string.Format("select * from customers where {0}", query)); 

Теперь она изменяется, чтобы исключить пустые строки, и это код работает нормально на SSMS:

SELECT [PassNumber] FROM [Customers] WHERE [PassNumber] <> '' 

Но я не могу найти способ правильно форматировать строку запроса. Я пробовал все возможные комбинации, о которых я думал, но код генерирует исключение: «Неверный синтаксис рядом с ключевым словом« <> ».

string query = "PassNumber <> '' "; 
DbSqlQuery<Customer> data = db.Customers.SqlQuery(string.Format("select * from customers where {0}", query)); 

ПРИМЕЧАНИЕ. Для простоты проверка нулевого значения была исключена из примеров в вопросе.

+0

Что исключение, которое выбрасывается? – drneel

+1

Вы, вероятно, избегаете апострофа. Попробуйте «PassNumber <> '' ''"; (4 апострофа). –

+0

Можете ли вы опубликовать весь sql, кажется, что в вашей строке запроса есть ошибка на основе сообщения об ошибке. – drneel

ответ

0

Если вы настаиваете на этом сырым SQL вы должны использовать:

db.Customers.SqlQuery("select * from customers where PassNumber <> @p0, string.Empty); 

Или

db.Customers.SqlQuery("select * from customers where LEN(PassNumber) > 0); 
+0

Мне лучше всего ответить на комментарий, который вы разместили о LinkKit. Я приму это здесь, чтобы закрыть поток. –

0

Вы пробовали использовать пункт

is null 

на SQL? or is not null

+0

IsNull отлично работает, но мне нужно проверить пустые строки –

1

Почему вы не используете LINQ при запросе в EF. Тогда все может быть проще:

var customerList = db.Customers.Where(c => c.PassNumber == string.Empty).ToList(); 
+0

Желаю мне может, но имя поля («PassNumber» в этом случае) также должно быть передано в запросе тем, что я не знаю, как это сделать в LINK. –

+0

@BenJunior Я не понимаю ... это 'PassNumber' не свойство класса' Customer'? –

+0

@Gert Arnold Полный запрос содержит два параметра: имя поля и условие. Это может быть c => c.PassNumber> 12 или c => c.State = "FL". Передача двух параметров легко в SqlQuery, но не так просто в LINK. –

Смежные вопросы