Linq-search分为两栏

时间:2014-05-14 14:31:35

标签: c#

我在用户表

中的数据库中有名字和姓氏

我在名字字段中存储了 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;

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

请错过什么?

6 个答案:

答案 0 :(得分:2)

两个列都不包含"Bob Charles",您希望Bob中的FirstNameCharles中的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 CharlesCharles也不包含Bob Charles。您需要将传递的Bob解析为Charles和{{1}}并分别搜索每个。

答案 2 :(得分:1)

你应该把第一个名字和姓氏存放在两个不同的变量中:

BobCharles

Charles不包含Bob CharlesBilly Bob

也不包含{{1}}

答案 3 :(得分:1)

  

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

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

一些选项:

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

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

答案 4 :(得分:1)

您的LINQ没问题,但您分别在Bob CharlesBilly 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]));