【LINQ】複数キーワードでAND検索・OR検索をする方法


検索窓に入力された複数のキーワードで、データテーブルを絞りこみたい。

キーワードをスペース区切りごとに別けます
//SeihinKeywordにスペース区切りのキーワードが入っています。
if (SeihinKeyword != null) {
   SeihinKeyword = SeihinKeyword.Replace(' ', ' ');
   SeihinKeywordList = SeihinKeyword.Split(' ');
}

LINQを使ってテーブルからデータをとりあえず持ってきます

DataconectDataContext Data = new DataconectDataContext();

var seihinData = from a in Data.Table
                 select a;

AND検索

//キーワードが一つ以上あったら
if (SeihinKeywordList.Count() > 0) {
   foreach (string Word in SeihinKeywordList) {
            seihinData = seihinData.Where(a => (a.SeihinName).Contains(Word));
   }
}
return seihinData; 

単純にキーワードの数だけWhereを使って絞り込みをしています。

OR検索

//キーワードが一つ以上あったら
if (SeihinKeywordList.Count() > 0) { 
    var Data = seihinData.Take(0);
    foreach (string Word in SeihinKeywordList) {
            Data = Data.Union(seihinData.Where(a =>(a.SeihinName).Contains(Word));
    }
    seihinData = Data;
}

return seihinData; 

AND検索と違って絞り込んだ結果を、さらに絞り込むことは出来ないので、
Dataという空の型にwhereで絞った値を次々にUnionさせていき、最後にseihinDataに結果を入れます。

うーん、もっと良い方法がある気もします。