使用linq搜索多个单词

本文关键字:单词 搜索 linq 使用 | 更新日期: 2023-09-27 18:12:30

我正在尝试使用linq搜索员工。我想要能够搜索多个搜索词(名、姓)我发现一些可以做到这一点,如果我只在一个DB表中搜索,但我的问题是,我在一些连接表中搜索。

下面的例子

    list<employee> list = from(e in dbContext.getTable<employee>
    join dbContext.GetTable<job>() on e.jobi equeals j.id
    where e.firstname.contains(keywords) || j.title.contains(keywords))
    select e).toList()

我想搜索"Mark developer",并获得所有被命名为Mark的人,其职位名称为developer。

任何ideers

使用linq搜索多个单词

将您的OR条件||替换为AND条件&&,以检索仅匹配标题和名称的记录(使用||,您将获取满足名称或标题的每条记录,这不是您想要的)。

假设keywords是类似string

string keywords = "Mark Developer"; // "<name> <title>"

你的查询应该工作,如果修改如下

list<employee> list = from(e in dbContext.getTable<employee>
    join dbContext.GetTable<job>() on e.jobi equeals j.id
    where (e.firstname.contains(keywords.split(' ')[0]) && (j.title.contains(keywords.split(' ')[1])))
    select e).toList()

如果大写/小写/混合大小写是一个问题,您可能需要像

这样的内容
list<employee> list = from(e in dbContext.getTable<employee>
    join dbContext.GetTable<job>() on e.jobi equeals j.id
    where (e.firstname.ToLower().contains(keywords.split(' ')[0].ToLower()) && (j.title.ToLower().contains(keywords.split(' ')[1].ToLower())))
    select e).toList()

我认为你应该把关键字分成一个数组

 var kwords = keywords.Split(' ');
然后

where (kwords.Contains(e.firstname) || kwords.Contains(j.title))

可能可以

反过来做。检查关键字是否包含名称/标题

var keys = keywords = keywords.Split(' ');     
list<employee> list = from(e in dbContext.getTable<employee>
        join dbContext.GetTable<job>() on e.jobi equeals j.id
        where keys.Contains(e.firstname) || keys.contains(j.title)
        select e).toList();

编辑如果你还想处理有多个名字的人,那么:

var keys = keywords = keywords.Split(' ');     
list<employee> list = from(e in dbContext.getTable<employee>
        join dbContext.GetTable<job>() on e.jobi equeals j.id
        where keys.Any(k=>e.firstname.Contains(k)) 
              || keys.Any(k=> j.title.Contains(k))
        select e).toList();

然而,我不觉得有信心,这可以翻译成SQL,但因为你还没有标记你的问题与linq-2-sql或EF,这可能不是一个问题(虽然从你的代码看来,EF标签可能是缺失的)

编辑如果您希望能够动态地构建查询(您的评论建议),我建议您看看动态LINQ

完美解决方案

http://briancaos.wordpress.com/2011/02/16/simple-string-keyword-search-using-extensionmethods-and-linq/