asp.net-mvc – 实体框架 – 选择特定列并返回强类型而不丢失强
发布时间:2020-12-16 06:56:36 所属栏目:asp.Net 来源:网络整理
导读:我正在尝试做类似于 this post的事情,我不会从特定实体中撤回所有列,但是我的框架使用了继承,并且在将其转换为匿名类型后我失去了实体类型的范围. 我的Entity Framework的结构有一个名为Action的基本实体.从这里开始,我创建了两个名为Event和Activity的继承
我正在尝试做类似于
this post的事情,我不会从特定实体中撤回所有列,但是我的框架使用了继承,并且在将其转换为匿名类型后我失去了实体类型的范围.
我的Entity Framework的结构有一个名为Action的基本实体.从这里开始,我创建了两个名为Event和Activity的继承实体.我想撤回最后的X个动作并将它们传递给我的强类型视图,该视图接受一个Action,并从那里确定它是一个Activity还是Event并呈现正确的局部视图. if(Model.GetType() == typeof(Event)) { //render Event view } else if(Model.GetType() == typeof(Activity)) { //render Activity view } 我可以将最后10个作为匿名类型拉出然后进行转换: var result = from a in new DataContext().Actions where a.UserId == someGuidValue select new { a.CreatedOn,a.Summary }; List<Action> list = result.AsEnumerable() .Select(o => new Action { CreatedOn = o.CreatedOn,Summary = o.Summary }).ToList(); 但是,一旦我将新的动作列表传递给我的强类型视图,它就失去了它是一个活动还是一个事件的范围,因为它被强制转换为动作.我的问题是,在没有暴露鉴别器列的情况下,有没有办法将每个项目转换为正确的类型,或者我是以错误的方式进行此操作? 解决方法
有点kludgy,但会工作:
var result = from a in new DataContext().Actions where a.UserId == someGuidValue let IsEvent = a as Event != null select new { a.CreatedOn,IsEvent,a.Summary }; List<Action> list = result.AsEnumerable() .Select(o => o.IsEvent ? (Action) new Event { CreatedOn = o.CreatedOn,Summary = o.Summary } : (Action) new Activity { CreatedOn = o.CreatedOn,Summary = o.Summary } }).ToList(); 具有特定于类型的列的示例,假设e.EventSpecific属于可空类型. var result = from a in new DataContext().Actions where a.UserId == someGuidValue let ev = a as Event let IsEvent = ev != null select new { a.CreatedOn,a.Summary,ev.EventSpecific }; List<Action> list = result.AsEnumerable() .Select(o => o.IsEvent ? (Action) new Event { CreatedOn = o.CreatedOn,Summary = o.Summary,EventSpecific = o.EventSpecific } : (Action) new Activity { CreatedOn = o.CreatedOn,EventSpecific = o.EventSpecific // will be null,but using o.EventSpecific saves casting } }).ToList(); 如果o.EventSpecific属于非可空类型,则必须在L2E查询中将其转换为可空类型. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 设计模式中的那些工厂
- asp.net-mvc-3 – MVC-3和Html.Serialize(ASP.NET 4,MVC3)
- 实体框架 – ASP.NET OData – 使用带数据传输对象的Delta实
- asp.net-mvc – @ Html.ValidationSummary是否适用于MVC3或
- asp.net-mvc – ASP.NET Web API无法在Azure上运行
- asp.net – 错误:找不到此项目类型所基于的应用程序
- asp.net-mvc – 在ASP.NET MVC应用程序下将ASP.NET Web API
- asp.net-mvc-4 – 返回Web API中的自定义错误对象
- asp.net – WCF:是否有一个属性要在OperationContract中生
- asp.net – ScriptManager.axd不会缓存
推荐文章
站长推荐
- asp.net – 如何为多行TextBox设置maxlength?
- Asp.net静态可变生命周期刷新和PostBack
- ASP.NET Razor查看Html.TextBox大小/宽度
- asp.net – 最佳实践 – 从Code-Behind设置jQuer
- asp.net-mvc – 混合spark和webform视图引擎
- asp.net-mvc-3 – MVC3 – 类型double与前导零的
- asp.net-mvc – MVC HandleError过滤器没有捕获异
- asp.net – IIS如何知道它是服务于一个网站还是一
- asp.net-mvc – 带有html实体的MVC标签
- asp.net-mvc – 如何使用jquery处理JSON?
热点阅读