Linq для SQL заменяет% на ~% - PullRequest
       4

Linq для SQL заменяет% на ~%

0 голосов
/ 24 ноября 2010

У меня есть база данных со столбцами firstName, middleName и lastName.Я использую linq для sql для запроса к этой таблице, мой ввод - полное имя,

Вот запрос linq:

var n = customerName.Replace(" ", "%");        
var customers = from c in _db.tblCustomers
    where ((c.cSurName??"") + " " + (c.cMiddleName??"") + " "+ (c.cLastName??"")).Contains(n)
    select c;

С «Jan Rue» в качестве ввода, этосоздает следующий SQL-оператор where:

    WHERE (((((COALESCE([t0].[cSurName],@p0)) + @p1) 
           + (COALESCE([t0].[cMiddleName],@p2))) + @p3) 
           + (COALESCE([t0].[cLastName],@p4))) LIKE @p5 ESCAPE ''~'''
   ,N'@p0 nvarchar(4000),@p1 nvarchar(1),@p2 nvarchar(4000),@p3 nvarchar(1),@p4 nvarchar(4000),@p5 nvarchar(11)'
   ,@p0=N'',@p1=N' ',@p2=N'',@p3=N' ',@p4=N'',@p5=N'%Jan~%Rue%'

И он дает мне 0 строк.Если я уберу ~, все будет работать нормально.Можно ли как-нибудь заставить LINQ не сбежать?

РЕДАКТИРОВАТЬ решение:

where SqlMethods.Like(((c.cSurName ?? "") + " " + (c.cMiddleName ?? "") + " " + (c.cLastName ?? "")), "%" + n + "%")

РЕДАКТИРОВАТЬ # 2: нашел больше информации: "Реализация версии SQL LINQ для LinuxНРАВИТСЯ Оператор "

Ответы [ 2 ]

3 голосов
/ 24 ноября 2010

Это ошибка в системе MS Connect . См. Вкладку «Временное решение».

Также посмотрите этот ТАК вопрос

0 голосов
/ 24 ноября 2010

Проблема в том, что Contains («Jan% Rue») переводится как «оно должно содержать буквенную строку« Jan% Rue »», поэтому Linq2Sql помогает избежать «%» внутри текста для вас.Только вы хотите, чтобы этот «%» означал подстановочный знак sql, поэтому вы не хотите, чтобы этот знак экранирования.

Статья, которую вы нашли, кажется многообещающей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...