在数据库中搜索与整个参数或参数的任何部分匹配的名称
本文关键字:参数 任何部 数据库 搜索 | 更新日期: 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();