1

グリッドビューがあり、各行に のインスタンスが 1 つ表示されますMyCustomType。インスタンス自体はTagDataGridViewRow のプロパティに格納されます。ここで、linq を使用して、複数の基準に基づいて特定の行を選択したいと考えています。これは次のようになります。

var rows = grid_series.Rows
    .Cast<DataGridViewRow>()
    .Where(x => ((MyCustomType)x).myProperty != string.Empty)
    .Where(x => ((MyCustomType)x).myOtherProperty < 42);

Tagしかし、すべてのステートメントで -objectをキャストすることは避けたいと思っていwhereます。オブジェクトを一度だけキャストして繰り返し使用する方法はありますか? 最初にselectステートメントを使用することを考えました。次に、キャストを1回だけ適用する必要がありますが、その後、各結果を「再変換」するDataGridViewRow必要があり、不可能だと思います。

4

1 に答える 1

3

を選択して、後でTag別のCast(またはOfType<>すべての行に含まれるわけではない )を実行するのはどうですか:MyCustomType

var rows = grid_series.Rows
    .Cast<DataGridViewRow>().Select(r => r.Tag).Cast<MyCustomType>()
    .Where(x => x.myProperty != string.Empty)
    .Where(x => x.myOtherProperty < 42);

必要に応じIEnumerable<DataGridViewRow>て、次を試すことができます。

var rows = grid_series.Rows
    .Cast<DataGridViewRow>()
    .Select(r => new { MyType = (MyCustomType)r.Tag, Row = r })
    .Where(x => x.MyType.myProperty != string.Empty)
    .Where(x => x.MyType.myOtherProperty < 42)
    .Select(x => x.Row);
于 2012-09-01T07:03:56.923 に答える