Linq-在两列中搜索

本文关键字:两列 搜索 Linq- | 更新日期: 2023-09-27 18:03:15

我在用户表的数据库中有名字和姓氏

我已将Billy Bob存储在Firstname字段中,将Charles保存在Surname字段中。

我正试图通过Bob Charles搜索用户

我正在使用以下查询来获取结果,但没有得到任何结果。我相信Contains关键字应该会在查询中为我带来任何匹配的单词。

这里的名字我是Bob Charles

 var query = from user in UserEntity
                        where user.FirstName.Contains(name) || user.Surname.Contains(name)
                        select user;

我应该在查询中得到这一行。

这里错过了什么?

Linq-在两列中搜索

这两列都不包含"Bob Charles",除非我弄错了,否则您希望在FirstName中查找Bob,在Surname中查找Charles

string bothNames = name.Split(); // Bob + Charles
string firstName = bothNames.First();
string lastname = bothNames.Last();
var query = from user in UserEntity
            where user.FirstName.Contains(firstName) || user.Surname.Contains(lastname)
            select user;

Billy Bob不包含Bob CharlesCharles也不包含。您需要将传递的Bob Charles解析为BobCharles,并分别搜索它们。

您应该将名字和姓氏存储在两个不同的变量中:

BobCharles

Charles不包含Bob CharlesBilly Bob 也不包含

我相信Contains关键字应该会在查询中为我带来任何匹配的单词

错误-它将返回整个字符串包含在FirstNameSurName中的结果。由于Billy BobCharles都不包含Bob Charles,因此不会返回。

一些选项:

  • 将查询拆分为单词,并查看这些单词中的是否有在您的姓名字段中
  • 连接两个名称字段(用空格分隔(,看看其中是否包含查询

您选择的方法取决于您希望搜索的严格程度。

您的LINQ很好,但您正在分别在Billy BobCharles中搜索Bob Charles,这就是为什么您没有收到任何结果。

以下是我的建议:

var query = user.Where(u => (u.FirstName + " " + u.LastName).Contains(name));

假设我们搜索"Bob Charles">,我们有:

string name = "Bob Charles";
var namesToSearch = name.Split(' ').ToList();
var UserEntities = new List<UserEntity>();
    UserEntities.Add(new UserEntity { FirstName = "Bily Bob", Surname = "Charles" }); // user1
    UserEntities.Add(new UserEntity { FirstName = "Bob", Surname = "Adam" }); // user2
    UserEntities.Add(new UserEntity { FirstName = "Anna", Surname = "Brown" }); // user3
    UserEntities.Add(new UserEntity { FirstName = "Charles", Surname = "Bob" }); // user4

如果您希望结果中包含user1user2用户4(意思是:所有名字或姓氏中有"Bob"或"Charles"的用户(:

var query = UserEntities.Where(a => (a.FirstName + " " + a.Surname).Split(' ').Any(b => namesToSearch.Contains(b)));

如果您只想在结果中使用user1user4(意思是:名字或姓氏中同时包含"Bob"answers"Charles"的用户(:

var query = UserEntities.Where(a => namesToSearch.All(b=> (a.FirstName + " " + a.Surname).Split(' ').Contains(b)));

如果您希望结果中有一个user1(意思是:名字中有"Bob",姓氏中有"Charles"的用户(:

var query = UserEntities.Where(a => a.FirstName.Split(' ').Contains(namesToSearch[0]) && a.Surname.Split(' ').Contains(namesToSearch[1]));