을 탈출 내가 가진 그것은 SQL 서버방지 EF 와일드 카드 문자
exec sp_executesql N'SELECT
// clipped
WHERE ([Extent1].[FieldName] LIKE @p__linq__0 ESCAPE N''~'')',
N'@p__linq__0 nvarchar(4000),@p__linq__0=N'%xxx~%yyy%'
@p__linq__0=N'%xxx~%yyy%
에 다음과 같은 성명 결과이
var query = repo.GetQuery(); // IQueryable
query.Where(item => item.FieldName.Contains("xxx%yyy"));
같은은 SQL 서버 (리터럴 %
와 xxx%yyy
을 찾아 원인 그것은 도망 간다.) 나는 xxx123yyy
, xxxABCyyy
, xxxANYTHINGyyy
, xxxyyy
등의 문자열과 일치시키고 싶다. prefix %
과 suffix %
괜찮지 만 필요할 경우 수동으로 할 수 있습니다.
위의 예제에서 조건을 하나만 작성하고 단순화했으나 이러한 키워드가 많은 조건자를 작성하는 동적 논리가 있으며 키워드 내에 와일드 카드를 포함 할 수 있습니다. EF가 검색 키워드에서 %를 벗어나지 않도록 지시하는 방법이 있습니까?
감사합니다. 나는 연결된 질문을 발견했지만 뭔가 새로운 것이 있었으면 좋겠다. 매개 변수와 함께 손으로 만들어진 SQL과 함께 ExecuteStoreQuery를 사용하고 있습니다. 이전에 정적 바인딩과 함께 PredicateBuilder를 사용했지만 모든 것이 문자열이 아니 었습니다. ( –
@amit_g : SQL Server로 작업하는 경우 LINQ 쿼리를 사용할 수있는 해결 방법 ('SqlFunctions.PatIndex')이 있습니다. http : // /stackoverflow.com/questions/6202036/entity-framework-v4-1-like/8000303#8000303. 일반적인 'LIKE'에 비해 SQL Server에서이 기능의 성능에 대해서는 잘 모르겠지만). – Slauma