2017-02-20 4 views
1

leaIdおよびseaIdがゼロより大きい場合、次のメソッドはデータを返します。LINQには、値がゼロより大きい場合に "&&"演算子が含まれます

leaIdと入力した場合、データを返すようにクエリを変更する必要はありますか?

演算子のため、seaIdはオプションでゼロに等しいため、何も返されません。 2枚でクエリ

public IQueryable<Stand> GetStand(int leaId, int seaId = 0) 
{ 
    return from c in db.Stands where c.LeaID == leaId && c.SeaID == seaId 
      select new Stand 
      { 
        //something 
      } 
} 
+1

'場合(seaId == 0)の戻りのようなc.LEadIDは== leadId他に<あなたの現在のクエリ>' –

答えて

5

スプリット:

IQueryable<Stand> query=db.Stands.Where(c= c.LeaID == leaId); 

if(seaId>0) 
{ 
    query=query.Where(c= c.SeaID == seaId); 
} 
return query.Select(e=>...); 

もう一つ重要なことは、あなたがエンティティタイプ(Stand)を使用してクエリを投影してはならないです。 EFでは、匿名型またはDTOを使用してプロジェクトを作成できます。カスタムクラスを使用して投影している場合は、この最後のコメントは無視してください。

+0

実際に戻り値の型を変更することができます「スタンド」はカスタムクラスです。私が気になるのは、2つのクエリを実行する必要があるということです。 (問題があれば、APIのエンドポイントについて):) – OrElse

+1

@OrElse、あなたは2つのクエリを実行していないので、結果を具体化するときに実行されるクエリを構築しています。例えば、ToListを呼び出します。またはそれを反復する – octavioccl

0

あなたはあなたの方法db.StandsにおけるCから

public IQueryable<Stand> GetStand(int leaId, int seaId = 0) 
    { 
     return from c in db.Stands where (c.LeaID == leaId) ||(seaId>0 && c.SeaID == seaId) 
       select new Stand 
       { 
         //something 
       } 
    } 
+0

こんにちは、それは単純なORとして動作します – OrElse

関連する問題