如果我使用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);
}
答案 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();
}
但是,正如已经建议的那样 - 您应该考虑使用全文搜索。