2010-11-24 3 views
0

저는 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"

답변

3

그것은 MS Connect에 로그온 벅스 : 좀 더 많은 정보를 발견했다. "해결 방법"탭을 참조하십시오. Linq2Sql가 유용하게 내부가 '%'를 탈출, 그래서 또한

SO question

0

문제는 그 "는 리터럴 문자열 '얀 %의 후회'를 포함해야한다"로 번역된다 ("월의 % 후회")를 포함합니다 참조 당신을위한 텍스트. 오직 '%'가 SQL- 와일드 카드를 의미하므로 이스케이프는 원하지 않습니다.

찾은 기사가 유망 해 보입니다.

관련 문제