2

状況: 複数の where 句を含む datatable への Linq クエリ。where句のフィルタは、アカウント、年、月などの複数のコンボボックスから取得されます。クエリの結果は、別のデータテーブルに保存されます。

私は次のようなさまざまなクエリを持っています...

        //Filter Year
            var query = from myRow in ds.Tables["tblOriginal"].AsEnumerable()
                        where myRow.Field<DateTime>("Datum").Year == int.Parse(cmbFilterYear.Text)
                        select myRow;
            ds.Tables["tblFilteredData"].Merge(query.CopyToDataTable());

...私はこれらのLinqクエリを約6つ持っており、これらを1つのクエリに入れたいと思っています

...&&...

すべての ComboBoxes に値が入力されている場合に機能します。

ただし、たとえば 6 つの ComboBox のうち 4 つだけに値が入力されている場合は機能しません。

「IF...」をクエリの「where」ブロックに入れる可能性はありますか?

where句の変数を設定するためにstringbuilderを使用しようとしましたが、適切なブール値に変換できません。

どんなアイデアでも大歓迎です。

4

2 に答える 2

1

メソッド構文の方法を使用したくない場合 (@lazyberezovsky が示すように)、次のような方法を試すことができます。

//Filter Year
var query = from myRow in ds.Tables["tblOriginal"].AsEnumerable()
            where (string.IsNullOrEmpty(cmb1.Text) || myRow.Field<DateTime>("Datum").Year == int.Parse(cmb1.Text))
               && (string.IsNullOrEmpty(cmb2.Text) || myRow.Field<DateTime>("Datum").Year == int.Parse(cmb2.Text))
               && (string.IsNullOrEmpty(cmb3.Text) || myRow.Field<DateTime>("Datum").Year == int.Parse(cmb3.Text))
            select myRow;
ds.Tables["tblFilteredData"].Merge(query.CopyToDataTable());

ここに、string.IsNullOrEmpty(cmb1.Text)価値のない条件があります。空であることは、ケースにとって適切な非値条件ではない場合、必要に応じて置き換えてください。

于 2013-09-13T10:29:27.350 に答える