26
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

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

キーワードをスペース区切りごとに別けます
//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に結果を入れます。

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

26
28
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
26
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?