1

特定の場所でフィルタリングするLINQクエリを設計しようとしています。私のUIドロップダウンリストでは、そのドロップダウンには「すべてのサイト」という最初のエントリがあります。したがって、クエリで「すべてのサイト」が値として表示される場合、フィルターは実行されません。これはあまり意味がないかもしれませんが、これは私がSQLでそれを行っていた方法です。

select * from table
where ((location = @loc and @loc is not null) or (@loc is null))

これが私がLINQでそれをやろうとしている方法です。

var dataSetB = db.Data
.Where(j => loc != 'All Sites' && j.Location1.Description.Equals(loc));

問題は、ユーザーが「すべてのサイト」を選択した場合、場所でフィルタリングされていないすべての結果を期待しているときに結果が返されないことです。

1つのLINQステートメントでこれを実現する方法を知っている人はいますか?

ドロップダウンの例。

<All Sites>
<Sydney>
<New York>
<London>
4

7 に答える 7

1

ドロップダウンには通常、テキストだけではなく、テキストと値のペアにバインドされます。したがって、読み取るテキストエントリNew South Walesの値はに対応しますNSW。読み取るエントリAll Sitesの値はnull。です。したがって、クエリを次のように変更できます。

public object GetMyStuff(string loc)
{
    var dataSetB = db.Data
                     .Where(j => loc == null || j.Location1.Description == loc);
}

式には論理ショートカットが適用されるためj.Location1.Description、渡されたloc値がnullでない場合にのみが比較されます。

All Sitesニュートラルな位置の値を使用することは重要です。さまざまな理由から、文字通りのテキストを比較する必要はありません。

于 2012-04-17T09:42:18.307 に答える
1

これが機能するかどうかは完全にはわかりません。

var dataSetB = db.Data
  .Where(j => loc != 'All Sites' ? j.Location1.Description.Equals(loc) : true);
于 2012-04-17T09:38:55.310 に答える
0

OR演算子を使用してクエリをLINQに変換するだけです。

var dataSetB = db.Data
          .Where(j => loc == 'All Sites' 
                      || j.Location1.Description.Equals(loc));
于 2012-04-17T09:38:44.477 に答える
0

これを試して

var dataSetB = db.Data;
if (loc != 'All Sites')
    dataSetB = dataSetB
                .Where(j => loc != 'All Sites' && j.Location1.Description.Equals(loc));
于 2012-04-17T09:38:59.510 に答える
0

if.. else代わりに次のように使用します。

var dataSetB = db.Data;
if(dropdownlist.SelectedIndex != 0)
      dataSetB = dataSetB.Where(j => j.Location1.Description.Equals(loc)); 

//loc should be the dropdown list value
于 2012-04-17T09:39:03.213 に答える
0

「すべてのサイト」の場合にLINQを使用するかどうかはわかりません。

ドロップダウン値=="すべてのサイト"かどうかを確認します。

trueの場合、データセット全体を使用します。
falseの場合、LINQクエリを実行します。

于 2012-04-17T09:39:36.630 に答える
0

すべての結果が必要な場合、フィルターはすべてのエントリを受け入れる必要があるため、正しい構文は次のようになります。

var dataSetB = db.Data
                .Where(j => loc == 'All Sites' || j.Location1.Description.Equals(loc));
于 2012-04-17T09:40:13.140 に答える