2016-03-22 4 views
0

私は、結果セットを与えるクエリを持っています。条件に基づいて、where句を書きたいと思っています。それは意味する。私は変数xを持っています。xの値が "ALL"の場合、この条件をすべて追加したくありません。値が "ALL"でなければ、where句を追加する必要があります(st.address = = x)。どのようにしてこの条件を下のクエリに追加できますか?ここで1つのlinqクエリで条件where句を与える方法はありますか?

var abc=(from st in Context.STopics join ap in Context.ATopic on st.id equals ap.id 
where st.address==x 
select new result() 
{ 
name = st.name 
add= ap.add}).ToList(); 
+0

これが重複ではありません。 – poc

+0

_ "これは重複していません" _ - 5人のユーザーがあなたに同意しません。そして私は彼らに同意します。なぜあなたはそうではないと思いますか? – CodeCaster

答えて

3

は、あなたが探しているものです:

var yourQuery = Context.STopics.AsQueryable(); 
var yourParam = "ALL"; 
if(yourParam != "ALL") 
    yourQuery = yourQuery.Where(x => x.IsActive==true && x.StudentID == 123); 

var abc = yourQuery.Select(x=> new result() 
           { 
            name = st.name 
           }).ToList(); 

事がLINQのとすぐに、クエリからデータを取得しないということです。したがって、必要に応じて実際のクエリをこのように構築することができます。

+0

@CodeCaster私の悪い –

1

あなたはx = "ALL"とそうでない場合は、あなたの他の条件に一致した場合、すべての要素にマッチするように、あなたの状態を作ることができます。

var abc=(from st in Context.STopics 
where x == "ALL" || (st.IsActive==true && st.StudentID == 123) 
select new result() 
{ 
name = st.name }).ToList(); 
+2

これまで数回質問したことがありますが、「固定」コードをダンプする代わりに、解答に説明を追加してください。また、このクエリを防ぐことができれば、データベース上でこのクエリを実行したくない場合もあります。いずれにしてもクライアント側で実行できる 'ALL '=' ALL 'となるでしょう。 – CodeCaster

+0

@CodeCasterは今より良いですか? –

+0

はい、ありがとうございます。それは後の読者があなたがしたことを見るのに役立ちます。 – CodeCaster

0

何かのように:

var abc=(from st in Context.STopics 
where (x!="All" ? (st.IsActive==true && st.StudentID == 123)) 
select new result() 
{ 
    name = st.name 
}).ToList(); 
関連する問題