在EF6中将匿名类型转换为IEnumerable
我正在使用Entity Framework开发MVC应用程序。 我想从表中获取5列并以IEnumerable类型返回它们。 我的代码是:
IEnumerable n = new List(); n = db.MSTs.Select(x => new { x.Id, x.Code, x.Desc, x.L1, x.L2 }).OrderBy(h => h.Code).ToList();
但它给了我错误
无法将类型’System.Collection.Generic.List
‘隐式转换为’System.Collection.Generic.IEnumerable
<>
‘
我该如何解决?
首先,您不需要ToList()
因为您不需要列表:
db.MSTs .Select(x => new { x.Id, x.Code, x.Desc, x.L1, x.L2 }) .OrderBy(h => h.Code)
现在您确实需要类型为MST
。 如果这是EF知道的类型,您可以直接在Select
包含它:
db.MSTs .Select(x => new MST{ Id = x.Id, Code =x.Code, Desc = x.Desc, L1 =x.L1, L2 =x.L2 }) .OrderBy(h => h.Code)
但事实并非如此,因此您需要使用AsEnumerable
从EF中断到内存中,然后在此之后创建MST
:
IEnumerable n = db.MSTs .Select(x => new { x.Id, x.Code, x.Desc, x.L1, x.L2 }).OrderBy(h => h.Code) .AsEnumerable() .Select(x => new MST{ Id = x.Id, Code =x.Code, Desc = x.Desc, L1 =x.L1, L2 =x.L2 });
(如果有一些原因你真的需要ToList()
你可以使用它而不是AsEnumerable()
,但你可能最好只是在所有这些之后放置一个最终的ToList()
,以获得类型的列表你真的想要)。
如果您使用的是异步代码,那么我们也会在await之后放置它:
IEnumerable n = (await db.MSTs .Select(x => new { x.Id, x.Code, x.Desc, x.L1, x.L2 }) .OrderBy(h => h.Code) .ToListAsync()) .Select(x => new MST{ Id = x.Id, Code =x.Code, Desc = x.Desc, L1 =x.L1, L2 =x.L2 });
您需要简单地投射Type MST
而不是匿名类型: –
n = db.MSTs.Select(x => new MST { Id = x.Id, Code = x.Code, Desc = x.Desc, L1= x.L1, L2 = x.L2 }).OrderBy(h => h.Code);
如果提供,您在MST
拥有所有这些属性。 此外,它不应该是一个映射的实体,它应该是一个DTO。
此外,您不需要ToList
,因为Select
返回IEnumerable
。
更新:
由于它是entity framework中的映射实体,因此一种方法是首先投影匿名类型,然后投影模型类型,如下所示: –
n = db.MSTs.Select(x => new { x.Id, x.Code, x.Desc, x.L1, x.L2 }).OrderBy(h => h.Code) .AsEnumerable() Select(x => new MST { Id = x.Id, Code = x.Code, Desc = x.Desc, L1= x.L1, L2 = x.L2 });
- Prism – EventAggregator.GetEvent 。订阅() – 使用generics和约束
- C#asp.net中WebForm中Winform的Textbox.KeyDown的备用事件是什么?
- 如何使用Kendo UI Grid与ToDataSourceResult(),IQueryable ,ViewModel和AutoMapper?
- 在ASP.NET中使用dependency injection和工厂模式传递服务
- 由于不区分大小写的URL和默认值,我如何避免ASP.NET MVC中的重复内容?
- 基于角色的安全性asp.net mvc
- 使用另一个对象扩展ASP.NET MVC 5标识
- Asp.net身份entity framework数据库第一种方法有自己的表定义
- 如何在URL中没有操作的情况下获取路由
- 使用存储库时,ASP.NET MVC中业务逻辑的最佳位置是什么?
- 如何防止MVC3上的多个post?