繁体   English   中英

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

[英]Using SQL “In” instead of “Like” using %wildcards% in Linq

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

我读到有关sql的文章,该文章使用LIKE以正确的顺序搜索字符串中的模式,例如,搜索%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);
    }

您可以在一行中创建查询,然后使用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();
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM