0
我試圖做一個可編輯的表。我有一個動態表格,列可以變得可見或不可見。我有一個額外的列與編輯按鈕。當我打這個時,我做了一個Ajax調用來獲得該行的可編輯版本。如何添加選擇到現有的Linq表達式
我的視圖模型:
public class List: IDynamicGridDataModel<View>
{
public List()
{
ColumnOptions = new ColumnOptions();
ColumnOptions.SelectedColumns = new List<string>() { "Address", "ZipCode", "City", "Country" };
ColumnOptions.DisabledColumns = new List<string>() { "Id" };
Items = new List<View>();
}
#region IDynamicGridDataModel<View> Members
public ColumnOptions ColumnOptions { get; set; }
public GridModel<View> GridModel { get; set; }
public IEnumerable<View> Items { get; set; }
#endregion
}
當項目有:
public class View
{
public long Id { get; set; }
public string Address { get; set; }
public string ZipCode { get; set; }
public string City { get; set; }
public string Country { get; set; }
}
我有以下擴展來創建錶行:
public static MvcHtmlString EditorRowFor<TModel, TRow>(this HtmlHelper<TModel> html, Expression<Func<TModel,TRow>> expression, IEnumerable<string> selectedColumns)
{
var metadataProvider = new DataAnnotationsModelMetadataProvider();
var stringBuilder = new StringBuilder();
stringBuilder.Append("<tr>");
foreach (var column in selectedColumns)
{
var entityParam = Expression.Parameter(expression.ReturnType);
var columnLambda = Expression.Lambda(Expression.Property(entityParam, typeof(TRow), column));
var selectCall = Expression.Call(typeof(Queryable),
"Select",
new Type[] { typeof(TModel), columnLambda.Body.Type },
expression,
columnLambda);
html.EditorCellFor(selectCall);
stringBuilder.AppendLine("</td>");
}
stringBuilder.AppendLine("</tr>");
return new MvcHtmlString(stringBuilder.ToString());
}
此功能從打電話給我像這樣的看法:
@Html.EditorRowFor(m => m.Items.Single(), Model.ColumnOptions.SelectedColumns);
的EditorCellFor方法簽名:
public static MvcHtmlString EditorCellFor<TModel, TItem>(this HtmlHelper<TModel> html, Expression<Func<TModel, TItem>> expression)
我現在的問題是與創建selectCall的。我想打一個表達式爲Lambda表達式:
m => m.Items.Single().Select(i => i.Address)
我得到以下錯誤:
No generic method 'Select' on type 'System.Linq.Queryable' is compatible with
the supplied type arguments and arguments. No type arguments should be
provided if the method is non-generic.
大多數週邊的那部分我就http://www.hanselman.com/blog/TheWeeklySourceCode47ASPNET35DynamicDataFilterRepeatersAndDynamicLinqQueryGeneration.aspx看到的代碼。
我一直在尋找整個早晨的問題,但沒有運氣到目前爲止。
好一點。但是當我有m => m.Items.Single()時,如何以Linq表達式的形式獲得這些內容?它必須在Linq Expression中,因爲我想將它傳遞給Html.EditorFor <>。 – 2012-07-19 12:40:05
看起來你應該使用'm.Items.Take(1).Select(...)' – 2012-07-19 14:00:43