저는 firstName, middleName 및 lastName 열이있는 데이터베이스가 있습니다. 내가 여기 SQL 용 Linq가 % % ~로 대체됩니다 % %
는 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;
입력으로, 이는 다음과 같은 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 : "Implementing a LINQ version of SQL’s LIKE Operator"