使用SQL“In”代替“Like”,在Linq中使用%wildcards%

时间:2013-08-19 17:19:23

标签: c# sql linq linq-to-sql

如果我使用Linq在描述字段中搜索,则在使用这两个查询进行搜索时会收到不同的结果。首先是此%MODULE%ALLEN BRADLEY%,然后是此查询%ALLEN BRADLEY%MODULE%的第二个。我希望这些搜索查询能够给出一个结果,其中这些单词出现在描述字段的任何位置。

我读到有关使用LIKE以正确的顺序在字符串中搜索模式的sql,例如搜索%MODULE%ALLEN BRADLEY%会强制结果在字符串中以特定顺序排列。但是,使用关键字“In”可在字符串中的任何位置搜索通配符。

我如何在Linq中实现这一目标?

这是我的Linq方法:

    public List<Item> SearchItems(string itemid, string description)
    {
        return (from allitems in _dbc.Items 
                where SqlMethods.Like(allitems.Number, itemid)
                && SqlMethods.Like(allitems.DESCRIPTION, description)
                select allitems);
    }

1 个答案:

答案 0 :(得分:1)

您可以在多行中创建查询,然后使用ToList()方法执行它:

public List<Item> SearchItems(string itemid, string description)
{
    IQueryable<Item> query = _dbc.Items.Where(x => SqlMethods.Like(x.Number, itemid));

    foreach(var word in description.Split(new char[] { '%' }, StringSplitOptions.RemoveEmptyEntries)
    {
        query = query.Where(x => SqlMethods.Like(x.Description,
                                                 string.format("%{0}%", word)));
    }

    return query.ToList();
}

但是,正如已经建议的那样 - 您应该考虑使用全文搜索。