Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何将Select添加到现有Linq表达式_Asp.net Mvc_Linq_Linq Expressions - Fatal编程技术网

Asp.net mvc 如何将Select添加到现有Linq表达式

Asp.net mvc 如何将Select添加到现有Linq表达式,asp.net-mvc,linq,linq-expressions,Asp.net Mvc,Linq,Linq Expressions,我正在尝试制作一个可编辑的表格。我有一个动态表,可以使列可见或不可见。我有一个带有编辑按钮的额外列。当我点击这个按钮时,我会进行一个Ajax调用,以获得该行的可编辑版本 我的viewmodel: public class List: IDynamicGridDataModel<View> { public List() { ColumnOptions = new ColumnOptions(); ColumnOptions.Select

我正在尝试制作一个可编辑的表格。我有一个动态表,可以使列可见或不可见。我有一个带有编辑按钮的额外列。当我点击这个按钮时,我会进行一个Ajax调用,以获得该行的可编辑版本

我的viewmodel:

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 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());
}
方法签名的EditorCellFor:

public static MvcHtmlString EditorCellFor<TModel, TItem>(this HtmlHelper<TModel> html, Expression<Func<TModel, TItem>> expression)
我得到以下错误:

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.
我在上面看到的大部分代码都围绕着这个部分


我整个上午都在寻找这个问题,但到目前为止运气不好。

一旦你调用了
Single
,你只会得到一个值-选择
的目的是投射一系列值

因此,要么使用:

m => m.Items.Single().Address


说得好。但是,当我有m=>m.Items.Single()时,如何以Linq表达式的形式获取它们呢?它必须在Linq表达式中,因为我想将它传递给Html.EditorFor.looking您应该使用
m.Items.Take(1)。选择(…)
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.
m => m.Items.Single().Address
m => m.Items.Select(i => i.Address).Single()