我在用户表
中的数据库中有名字和姓氏我在名字字段中存储了 Billy Bob ,在Surname字段中存储了 Charles 。
我正在尝试通过 Bob Charles
搜索用户我使用以下查询来获得结果,但我没有得到任何结果。我相信Contains关键字应该在查询中为我带来任何匹配的单词。
这里的名字我传递的是 Bob Charles
var query = from user in UserEntity
where user.FirstName.Contains(name) || user.Surname.Contains(name)
select user;
我应该在查询中找到这一行。
请错过什么?
答案 0 :(得分:2)
两个列都不包含"Bob Charles"
,您希望Bob
中的FirstName
和Charles
中的Surname
查找,除非我弄错了。
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;
答案 1 :(得分:1)
Billy Bob
不包含Bob Charles
,Charles
也不包含Bob Charles
。您需要将传递的Bob
解析为Charles
和{{1}}并分别搜索每个。
答案 2 :(得分:1)
你应该把第一个名字和姓氏存放在两个不同的变量中:
Bob
和Charles
Charles
不包含Bob Charles
,Billy Bob
答案 3 :(得分:1)
我相信Contains关键字应该在查询中为我带来任何匹配的单词
错误 - 它将返回整个字符串包含在FirstName
或SurName
中的结果。由于Billy Bob
和Charles
都不包含 Bob Charles
,因此不会将其返回。
一些选项:
您选择的方法取决于您希望搜索的严格程度。
答案 4 :(得分:1)
您的LINQ没问题,但您分别在Bob Charles
和Billy Bob
中搜索Charles
,这就是您没有收到任何结果的原因。
以下是我的建议:
var query = user.Where(u => (u.FirstName + " " + u.LastName).Contains(name));
答案 5 :(得分:0)
让我们说我们搜索" 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 和 user4 (意味着:所有拥有&#34的用户; Bob&# 34;或者#34;查尔斯&#34;用他们的名字或姓氏):
var query = UserEntities.Where(a => (a.FirstName + " " + a.Surname).Split(' ').Any(b => namesToSearch.Contains(b)));
如果您只想在结果中使用 user1 和 user4 (意味着:同时拥有&#34; Bob&#34;和&#34;&#34; Charles&#的用户34;以他们的名字或姓氏):
var query = UserEntities.Where(a => namesToSearch.All(b=> (a.FirstName + " " + a.Surname).Split(' ').Contains(b)));
如果你想在结果中使用 user1 (意思是:那些用&#34; Bob&#34;用他们的名字和#34; Charles&#34;在他们的姓氏中的用户) :
var query = UserEntities.Where(a => a.FirstName.Split(' ').Contains(namesToSearch[0]) && a.Surname.Split(' ').Contains(namesToSearch[1]));