2011-10-16 42 views
5

スタックオーバーフローに関する多くの投稿が検索されましたが、私には回答が得られましたが、まだ明確ではありません。私は動的クエリを構築する簡単な方法を探しています。私はwhere句で単一の式を含む単純なクエリを実行することができましたが、複数の式を扱う簡単な方法を見つけることができません。私は迅速かつコンパイル時に安全なクエリ構築のために非常に便利なNHibernate criteria APIを扱った経験があります。私はEntityFrameworkで同様のものが利用可能になるだろうが、これまで運がない。手動で文字列クエリを作成する以外に簡単な方法はありますか?私はそれが動作するはずだと思ったが、それはしないコードを見てみましょう。実際には、複数のラムダ式に対してクエリを作成しません。私はそれぞれの呼び出しがwhere句に1つのAND式を追加することを期待していました。何か不足していますか?動的SQLクエリエンティティフレームワーク

var query = Entities.Current.Jobs.AsQueryable<Job>(); 

      if (!string.IsNullOrEmpty(keywords)) 
      { 
       query.Where(j => j.Title.Contains(keywords) || j.Description.Contains(keywords)); 
      } 

      if (industryId > 0) 
      { 
       query.Where(j => j.IndustryId == industryId); 
      } 

      if (countyId > 0) 
      { 
       query.Where(j => j.CountyId == countyId); 
      } 

      return query.ToList<Job>(); 

答えて

6

IQueryableは不変です。既存のIQueryableのクエリを(直接的に)変更することはできません。 query.Whereは、新しいIQueryableを追加のwhere句とともに返します。

あなたはこれらの新しいIQueryableで何もしていません。あなたは

query = query.Where(...) 
+0

1ミリ秒を掲載してビートを記述する必要が

Icarus