C# 使用SQL;在;而不是",;例如;在Linq中使用%wildcards%

C# 使用SQL;在;而不是",;例如;在Linq中使用%wildcards%,c#,sql,linq,linq-to-sql,C#,Sql,Linq,Linq To Sql,如果我使用Linq在描述字段中搜索,我在使用这两个查询进行搜索时会收到不同的结果。首先通过此%MODULE%ALLEN BRADLEY%查询,然后通过此查询%ALLEN BRADLEY%MODULE%。我想这些搜索查询给我一个结果,这些词出现在任何地方的描述字段 我读到过sql,使用像一样以正确的顺序搜索字符串中的模式,例如搜索%MODULE%ALLEN BRADLEY%将强制结果在字符串中以特定的顺序出现。但是,使用关键字“In”在字符串中的任何位置搜索通配符 我如何在Linq实现这一目标?

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

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

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

这是我的Linq方法:

public List SearchItems(string itemid,string description)
{
返回(来自_dbc.Items中的所有项目)
其中SqlMethods.Like(allitems.Number,itemid)
&&Like(allitems.DESCRIPTION,DESCRIPTION)
选择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();
}
public List SearchItems(string itemid,string description)
{
IQueryable查询=_dbc.Items.Where(x=>SqlMethods.Like(x.Number,itemid));
foreach(description.Split中的var word(新字符[]{“%”,StringSplitOptions.RemoveEmptyEntries)
{
query=query.Where(x=>SqlMethods.Like(x.Description,
格式(“%{0}%”,word));
}
返回query.ToList();
}

然而,正如已经建议的那样,你应该考虑使用全文搜索。

你应该使用全文搜索来搜索这些类型。有一个通配符作为第一个字符就排除了使用IDESCONS的可能性,并且肯定地表明你的设计是坏的。谢谢你的评论@ HLGEM,设计可能不好,但这是FR的要求。告诉客户搜索还应包括“从通配符开始”。使用通配符的搜索实际上是系统内的用户输入。这就是为什么您需要研究全文搜索。确实,这很难实现,但它会解决您的问题,而且速度会快得多。您可能了解@HLGEM,我一直在研究全文搜索,这可能是解决我的搜索问题的关键。但是解决方案在MarcinJuraszek上,我做到了这一点,所以我现在要坚持下去。当我优化我的查询时,我肯定会在全文搜索方面做得更好。谢谢你们:)
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();
}