1

ServerRow私の見解では、 4 つのテキストボックス (ホスト名、OS、場所、ゾーン)のコレクションを保持するデータテーブルがあります。ユーザーが 4 つのボックスのいずれかに入力すると、すぐにこのリストをフィルター処理したいと考えています。このコードのセットアップが完了し、各テキスト ボックス プロパティの set メソッドで filter メソッドを呼び出す準備が整いました。

問題は次のとおりです。基準が 4 つある場合は、2 の 4 乗の異なるシナリオがあることを意味します。私がやりたいのは、これらすべてのシナリオを処理するlinqステートメントを記述して、プロパティのいずれかが句NullOrEmptyで使用されずWhere、値があれば対応するフィールドが検索されるようにすることです。とContains

AvailableCis = New ObservableCollection(Of ServerRow)
                (_CiData.Where(Function(ci) ci.OS.ToUpper
                .Equals(_selectedOS.ToUpper) AndAlso 
                ci.HostName.ToUpper.Contains(_ciNameFilterText.ToUpper))
                .OrderBy(Function(a) a.CiName))

この例は、2 つの条件でどのように機能するかを示しており、これらの条件の両方が設定されています。

4

1 に答える 1

1

遅延評価を使用してこの問題を解決できます -

String.IsNullOrEmpty(ci.OS) OrElse ci.OS.ToUpper.Equals(_selectedOS.ToUpper)

このように、文字列が null または空の場合、2 番目の句は評価されず、すべての ServerRows が受け入れられます。

また、AndAlso は OrElse よりも優先順位が高いため、各句を角かっこで囲む必要があることも忘れないでください。

于 2012-06-07T17:23:02.270 に答える