使用linq搜索多个单词

时间:2011-10-26 08:24:51

标签: c# linq linq-to-sql

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

以下示例

    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开发人员”,并让所有名为mark的人都有一个职位名称开发人员。

任何想法者

4 个答案:

答案 0 :(得分:1)

将AND条件||替换为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()

答案 1 :(得分:0)

我认为您应该将关键字拆分为数组

 var kwords = keywords.Split(' ');

然后

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

可能会起作用

答案 2 :(得分:0)

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

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标签)

修改 如果您希望能够动态构建查询(您的意见建议),我建议您查看Dynamic LINQ

答案 3 :(得分:-1)