2011-05-13 1 views
1

C# or VB.NET are welcome.데이터베이스에서 전체 매개 변수 또는 매개 변수의 일부와 일치하는 이름을 검색하십시오.

매개 변수를 포함하는 모든 레코드를 선택하는 쿼리를 작성하고 있습니다.

직원 테이블이 하나 있습니다. 매개 변수가

  • "존"
  • "존 데이비드"
  • "데이비드 존"
  • "존 클라크"
  • 경우 존 데이비드 클라크

    : 어떤 사람들은이 같은 이름이

  • "클라크 존"

나는 거기에있는 한 결과를 되 찾을 수 있어야합니다. 매개 변수가 일치합니다. 나는 기능은 (q.FirstName & "이 포함되어 사용하는 경우 존 클라크

에서 다음 단어 만 찾습니다 기능이 포함되어 있습니다" "& q.LastName) .Contains (employeeName)를 employeeName 경우, 내가 다시 어떤 결과를 얻을 수 없습니다" 왼쪽에서 오른쪽으로. 한 번에 한 단어 씩 일치하지 않습니다. 내가 SQL에 Linq에이를 사용하는 이유

그래서 그건 :

 Dim employeeName As String 
     query = From q In db.Employees _ 
       Where (q.FirstName & " " & q.LastName).Split(CChar(" ")).Intersect(employeeName.Split(CChar(" "))).Any _ 
       Select q 

내가 가지고 다음과 같은 오류 :

Local sequence cannot be used in LINQ to SQL implementation of query operators except the Contains() operator

가있는 다른 있는데 이름에 대한 조회 할 수 있습니다 방법과 성이 있는가 매개 변수의 어떤 부분?

답변

0

이 검색 문자열에 모두 이름과 성이 일치해야하는 직원을 찾을 수 있습니다 :

 var searchText = "John David Clark"; 
     var tokens = searchText.Split(null); 

     var result = db.Employees 
      .Where(arg => tokens.Contains(arg.FirstName) && tokens.Contains(arg.LastName)) 
      .Select(arg => new { arg.LastName, arg.FirstName }) 
      .ToList(); 

이 검색 문자열에있는 이름 마지막 또는 이름의 일치가 그 직원을 찾을 것이다 :

 var searchText = "John David Clark"; 
     var tokens = searchText.Split(null); 

     var result = db.Employees 
      .Where(arg => tokens.Contains(arg.FirstName) || tokens.Contains(arg.LastName)) 
      .Select(arg => new { arg.LastName, arg.FirstName }) 
      .ToList(); 
관련 문제