Expression<Func<T, TValue>>(like m => m.Name) とが与えられた場合index、式を ) に変換できるようにしたいと考えていますm => m[index].Name。そして、私は立ち往生していることを認めなければなりません...
「一体なぜ」が必要な場合は、実際のシナリオを提供します(そして、より良い方法を見つけるかもしれません)。
シナリオ:サーバー側の編集可能グリッド( javascript なし) を想像してください。
次のようなヘルパーを使用してグリッドを構築します。
@(Html.Grid(Model)
.Columns(columns => {
columns.Edit(m => m.Name);
columns.Edit(m => m.Code);
})
.AsEditable());
モデルはIQueryable<T>
m => m.NameExpression<Func<T, TValue>>(はTValue文字列) です
m => m.CodeはExpression<Func<T, TValue>>( TValueint です)
ビューをレンダリングするときに、html フォームを表示したいと思います。IQueryable<T>が列挙されます (順序、ページ付け) 。=>わかりました
したがって、5、10 List<T>、または 20 個のTアイテムがあります。
とは、クラシックを使用してとして表す必要がありますName( を作成しても問題ありません) 。CodeTextBoxHtmlHelper.TextBoxFor(Expression<Func<T, TValue>>)HtmlHelper<T>
しかし、私はリストを持っているので、正しいモデルバインディングm => m.Nameが必要な場合は、直接使用することはできませんが、使用する必要がありますm => m[indexOfItem in List<T>].Name
編集:詳細:
エンティティクラスがあるとしましょう
public class Test {
public int Id {get;set;}
public string Name {get;set;}
public string Code {get;set;}
}
次に、IQueryable<Test>
次に、ビュー
@model IQueryable<Test>
@(Html.Grid(Model)
.Columns(columns => {
columns.Edit(m => m.Name);
columns.Edit(m => m.Code);
})
.AsEditable());
ご覧のとおり、パラメータとして指定されたモデルはIQueryable<Test>です。
m => m.Name
と
m => m.Code
モデルの単なるプロパティです(グリッドに TextBox として表示したい)。
グリッドが順序付けとページ付けを管理するため、モデルはIQueryable<T>(ではなく) であり、コントローラーとサービス レイヤーはページ付けと順序付けについて知る必要がありません。IEnumerable<T>
より明確ですか?