2010-06-15 7 views
2

현재 우리 프로젝트에서 우리는 Entity Framework 및 LINQ를 사용하고 있습니다. 클라이언트가 다른 필터를 채우지 만 강제되지는 않는 검색 기능을 만들고 싶습니다.LIKE to Entity에서 LIKE 연산자 사용

LINQ에서이 "동적"쿼리를 수행하기 위해 Like 연산자를 사용하여 필드를 검색하거나 사용자가 필드를 채우지 않은 경우 모든 것을 얻기 위해 "%"를 검색했습니다.

우리가 그것을 발견했을 때 농담은 우리를지지하지 않았습니다. 검색을 한 후에 StartsWith를 사용하기에 충분한 답변을 여러 개 읽었지만 우리에게는 쓸모가 없습니다.

ObjectQuery<Contact> contacts = db.Contacts; 
if (pattern != "") 
{ 
     contacts = contacts.Where(“it.Name LIKE @pattern”); 
     contacts.Parameters.Add(new ObjectParameter(“pattern”, pattern); 
} 

그러나, 우리는 LINQ를 고수하고 싶습니다 :

같은 것을 사용하는 유일한 솔루션입니다.

해피 코딩!

답변

2

Contains를 사용해 보셨습니까?

contacts.Contains(pattern); 

LINQ가 생성하는 간단한 예제는이 링크를 참조하십시오.

http://davidhayden.com/blog/dave/archive/2007/11/23/LINQToSQLLIKEOperatorGeneratingLIKESQLServer.aspx

+0

'.Contains'는 (예상 할 수 있으므로)가 WHERE XYZ 'SQL로 번역 있도록 LINQ는 이전과 주어진 문자열 후 와일드 카드 문자를 넣어됩니다 LIKE '% [pattern] %''- 시작과 끝에서 와일드 카드를 허용하지 않으려면 충분하지 않습니다. – Jez

2

사용이 :

using System.Data.Objects.SqlClient; 

... .Where(it => SqlFunctions.PatIndex("pat%", it.Name) > 0)