0

Linq を使用して説明フィールド内を検索すると、これら 2 つのクエリで検索すると異なる結果が返されます。最初にこれ%MODULE%ALLEN BRADLEY%で、次にこのクエリで 2 番目%ALLEN BRADLEY%MODULE%。これらの検索クエリで、これらの単語が説明フィールドの任意の場所に表示される結果が得られるようにしたいと考えています。

LIKEたとえば、文字列内のパターンを正しい順序で検索する%MODULE%ALLEN BRADLEY%と、結果が文字列内の特定の順序になるように強制されるというSQLについて読みました。ただし、キーワード「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);
    }
4

1 に答える 1

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();
}

ただし、既に提案されているように、代わりに全文検索の使用を検討する必要があります。

于 2013-08-19T17:28:53.533 に答える