繁体   English   中英

使用任何LINQ函数设置模型属性

[英]Using Any LINQ function to set model property

我有一个模型:

public class MyModel { 
    int id { get; set; }
    bool selected { get; set; }
}

在我看来(继承了IEnumerable<MyModel> ),我称:

Html.EditorForModel()

这将调用子视图(或其子视图),并显示ID的隐藏字段和选定布尔的复选框。

我希望能够传递一些已选中的复选框,因此在控制器中,我正在执行以下操作:

MyModel newmod = new MyModel { Id = 5, selected = (userselections.Any(t=> t.PlayerId == x.id) == true) }; 

其中userselections是具有PlayerId属性的对象列表。

但是,我得到了错误:

Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.

编辑

用户选择的填充方式:

var userselections = selectionRepository.Selection.Where(t => t.TeamId == curUser.TeamId).ToList();

堆栈跟踪

[NotSupportedException: Local sequence cannot be used in LINQ to SQL implementations of query operators except the Contains operator.]
   System.Data.Linq.SqlClient.QueryConverter.CoerceToSequence(SqlNode node) +901537
   System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc) +5897
   System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc) +70
   System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) +1025
   System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp) +30
   System.Data.Linq.SqlClient.QueryConverter.VisitBinary(BinaryExpression b) +27
   System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) +449
   System.Data.Linq.SqlClient.QueryConverter.VisitExpression(Expression exp) +30
   System.Data.Linq.SqlClient.QueryConverter.VisitMemberInit(MemberInitExpression init) +449
   System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) +222
   System.Data.Linq.SqlClient.QueryConverter.VisitSelect(Expression sequence, LambdaExpression selector) +160
   System.Data.Linq.SqlClient.QueryConverter.VisitSequenceOperatorCall(MethodCallExpression mc) +1419
   System.Data.Linq.SqlClient.QueryConverter.VisitMethodCall(MethodCallExpression mc) +70
   System.Data.Linq.SqlClient.QueryConverter.VisitInner(Expression node) +1025
   System.Data.Linq.SqlClient.QueryConverter.ConvertOuter(Expression node) +111
   System.Data.Linq.SqlClient.SqlProvider.BuildQuery(Expression query, SqlNodeAnnotations annotations) +114
   System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) +132
   System.Data.Linq.DataQuery`1.System.Collections.IEnumerable.GetEnumerator() +32
   System.Web.Mvc.Html.DefaultEditorTemplates.CollectionTemplate(HtmlHelper html, TemplateHelperDelegate templateHelper) +896
   System.Web.Mvc.Html.DefaultEditorTemplates.CollectionTemplate(HtmlHelper html) +68
   System.Web.Mvc.Html.TemplateHelpers.ExecuteTemplate(HtmlHelper html, ViewDataDictionary viewData, String templateName, DataBoundControlMode mode, GetViewNamesDelegate getViewNames) +1594
   System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData, ExecuteTemplateDelegate executeTemplate) +1616
   System.Web.Mvc.Html.TemplateHelpers.TemplateHelper(HtmlHelper html, ModelMetadata metadata, String htmlFieldName, String templateName, DataBoundControlMode mode, Object additionalViewData) +86
   System.Web.Mvc.Html.EditorExtensions.EditorForModel(HtmlHelper html) +91'

(很抱歉,不确定确切的格式。在调用System.Web.Mvc之前,我一开始就删掉了所有内容)。

如何使用Contains?

selected = (userselections.Select(t => t.PlayerID).ToList().Contains(x.id) == true)

.ToList()添加到查询中,以强制将其立即发送到客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM