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

本文关键字:参数 任何部 数据库 搜索 | 更新日期: 2023-09-27 17:56:32

欢迎使用 C# 或 VB.NET。

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

我有一张名为"员工"的表。有些人有这样的名字:约翰·大卫·克拉克

如果参数为

  • "约翰"
  • "约翰·大卫"
  • "大卫·约翰"
  • "约翰·克拉克"
  • "克拉克·约翰"

只要参数匹配,我应该能够得到结果。

如果我使用函数包含(q.FirstName & " " & q.LastName)。包含(员工名称),如果员工名称为"约翰克拉克",我将不会得到任何结果函数包含仅从左到右查找下一个单词。它一次不匹配一个单词。

这就是为什么我在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

我收到以下错误:

本地序列不能在查询运算符的 LINQ to SQL 实现中使用,但 Contains() 运算符除外

有没有另一种方法可以查询具有参数任何部分的名字和姓氏?

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

这将找到那些名字和姓氏都与搜索字符串匹配的员工:

        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();