[英]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.