У меня есть база данных со столбцами 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НРАВИТСЯ Оператор "