<asp:CheckBoxList>
で選択されたすべてのチェックボックスの値のList
またはIEnumerable
を取得するシナリオを考えます。
これが現在の実装です:
IEnumerable<int> allChecked = (from item in chkBoxList.Items.Cast<ListItem>()
where item.Selected
select int.Parse(item.Value));
質問:ラムダ式またはラムダ構文を使用して、このLINQクエリをどのように改善しますか?
あなたはラムダ式を使用していますある-それらはC#のクエリ演算子の使用によって単に隠されています。
これを考慮してください:
IEnumerable<int> allChecked = (from item in chkBoxList.Items.Cast<ListItem>()
where item.Selected
select int.Parse(item.Value));
これにコンパイルされます:
IEnumerable<int> allChecked = chkBoxList.Items.Cast<ListItem>()
.Where(i => i.Selected)
.Select(i => int.Parse(i.Value));
ご覧のとおり、すでに2つのラムダ式(これらはWhere
およびSelect
メソッドへのパラメーターです)を使用しており、知らないほどです。このクエリは問題なく、まったく変更しません。
Cast<T>
を暗黙的に呼び出すことにより、クエリ式を改善します。
IEnumerable<int> allChecked = from ListItem item in chkBoxList.Items
where item.Selected
select int.Parse(item.Value);
範囲変数のタイプを指定すると、コンパイラーはCast<T>
への呼び出しを挿入します。
それ以外は、Andrewに完全に同意します。
編集:Gonealeの場合:
IEnumerable<int> allChecked = chkBoxList.Items
.Cast<ListItem>()
.Where(item => item.Selected)
.Select(item => int.Parse(item.Value));