在数据库中搜索与整个参数或参数的任何部分匹配的名称

时间:2011-05-13 05:39:20

标签: c# sql vb.net sql-server-2008 linq-to-sql

  

欢迎使用C#或VB.NET。

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

我有一个名为Employees的表。有些人的名字是这样的:John David Clark

如果参数是

  • “约翰”
  • “John David”
  • “大卫约翰”
  • “John Clark”
  • “Clark John”

只要参数匹配,我就能得到结果。

如果我使用Function Contains(q.FirstName&“& q.LastName).Contains(employeeName),如果employeeName是”John Clark“,我将不会得到任何结果 功能包含仅从左到右查找下一个单词。它一次不匹配一个单词。

这就是我在Linq to 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

我收到以下错误:

  

除了Contains()运算符

之外,本地序列不能用于查询运算符的LINQ to SQL实现

我是否有另一种方法可以查询具有参数任何部分的FirstName和LastName?

1 个答案:

答案 0 :(得分: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();