私が行っている Web サイトでは、LINQ to Entities を使用しています。サイトに検索機能を追加することで起訴されました。データベース内の単一のフィールドで複数のキーワード (ユーザーが入力したもの) を検索する最もエレガントな方法を見つけようとしています。例を挙げましょう。
表の列:
Name, Description
行の例:
"Cookie monster", "Fluffy, likes cookies and blue"
ユーザー検索 (区切り文字は関係ありません):
"blue fluffy"
現在、私は以下を使用しています:
public List<SesameCharacters> SearchByKeywords(string keywords)
{
List<SesameCharacters> output = new List<SesameCharacters>();
string[] k = keywords.ToLower().Split(' ');
using (SesameStreet_Entities entities = new SesameStreet_Entities())
{
IQueryable<SesameCharacters> filter = entities.SesameCharacters;
foreach (string keyword in k)
filter = ForceFilter(filter, keyword);
output = filter.ToList();
}
return output;
}
private IQueryable<SesameCharacters> ForceFilter(IQueryable<SesameCharacters> filter, string keyword)
{
return filter.Where(p => p.Description.ToLower().Contains(keyword));
}
これは現在期待どおりに機能しますが、問題に対する最善の解決策ではないと思います。明らかに明らかな何かが欠けていますか?
注:これはAND
一致しています。