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;
我应该在查询中得到这一行。
这里错过了什么?
这两列都不包含"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 Charles
,Charles
也不包含。您需要将传递的Bob Charles
解析为Bob
和Charles
,并分别搜索它们。
您应该将名字和姓氏存储在两个不同的变量中:
Bob
和Charles
Charles
不包含Bob Charles
,Billy Bob
也不包含
我相信Contains关键字应该会在查询中为我带来任何匹配的单词
错误-它将返回整个字符串包含在FirstName
或SurName
中的结果。由于Billy Bob
和Charles
都不包含Bob Charles
,因此不会返回。
一些选项:
- 将查询拆分为单词,并查看这些单词中的是否有在您的姓名字段中
- 连接两个名称字段(用空格分隔(,看看其中是否包含查询
您选择的方法取决于您希望搜索的严格程度。
您的LINQ很好,但您正在分别在Billy Bob
和Charles
中搜索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
如果您希望结果中包含user1、user2和用户4(意思是:所有名字或姓氏中有"Bob"或"Charles"的用户(:
var query = UserEntities.Where(a => (a.FirstName + " " + a.Surname).Split(' ').Any(b => namesToSearch.Contains(b)));
如果您只想在结果中使用user1和user4(意思是:名字或姓氏中同时包含"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]));