1

where句に基づいてレコードのリストを返すlinqステートメントがあり
ます。このwhere句は2つのパラメーター値をチェックします。
そのうちの1つのパラメータはオプションです。 したがって、このような
オプションのパラメータに基づいてwhere句を切り替えることができるかどうかの提案が必要です

if(locid==0)
  {
   where (p.CustomerID == custid)
  }
 else{
   where (p.CustomerID == custid) & (p.LocationID == locid )
     }

誰かが私を助けてくれますか?どうすればこの仕事を手に入れることができますか?

ありがとう

4

3 に答える 3

3

あなたはそれをこのように書くことを試みることができます:

where (p.CustomerID == custid) && (locid == 0 || p.LocationID == locid )
于 2011-10-06T16:48:37.267 に答える
3

はい-クエリを作成できます(ただし、@ rsbarroが指摘したように、この特定のケースではこれは必要ありません)。

var query = p;

if(locid==0)
   query = query.Where( p =>p.CustomerID == custid);
else
   query = query.Where( p =>p.CustomerID == custid & p.LocationID == locid);

//any other conditions
于 2011-10-06T16:49:04.650 に答える
1

BrokenGlassが述べたように、構成を使用する必要があります。

IQueryable<Foo> query = unfiltered.Where(p => p.CustomerID == custId);
if (locid != 0)
{
    query = query.Where(p => p.LocationID == locid);
}

クエリは、データの読み取りを開始するまで実行されないため、複数のリクエストを行うことを心配する必要はありません。

元の投稿では、クエリ構文を少しずつ使用しようとしていたようですが、これは機能しませんが、ここでは「ドット表記」は非常に単純です。必要に応じて、クエリ式を使用して最初のクエリをいつでも作成できます。繰り返しになりますが、そのクエリはすぐには実行されません。

于 2011-10-06T16:51:59.560 に答える