2011-05-13 67 views
1

C# or VB.NET are welcome.在数据库中搜索与整个参数或参数的任何部分匹配的名称

我正在编写一个查询来选择包含任何参数部分的所有记录。

我有一个名为Employees的表。有些人有这样的名字:约翰·戴维·克拉克

如果参数是

  • “约翰”
  • “约翰·大卫”
  • “大卫·约翰”
  • “约翰·克拉克”
  • “克拉克约翰”

我应该能够得到的结果只要在那里在参数上是匹配的。

如果我使用函数包含(q.FirstName &“” & q.LastName)。载有(employeeName),我不会得到任何结果回来,如果employeeName是“约翰·克拉克” 函数包含只着眼于从接下来的话左到右。它一次不匹配一个单词。

所以这就是为什么我用这个在LINQ到SQL:

 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(); 
相关问题