[asp.net-mvc]转换匿名类型到 IEnumerable<>在 EF6

发布时间: 2017/3/25 10:55:38
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我开发 MVC 应用程序中使用实体框架。我想要获取 5 列从一个表和IEnumerable类型返回它们。我为此代码是︰

IEnumerable<MST> n = new List<MST>();
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 <Anonymous#1> ' 到 ' System.Collection.Generic.IEnumerable <<MST>> '

我怎样可以解决它?

解决方法 1:

首先,你不需要 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)

但它并非,所以你需要打破从 EF 向内存中与 AsEnumerable 然后做创作的 MST 之后︰

IEnumerable<MST> 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() 毕竟,要得到的列表类型你实际上想)。

如果您在使用异步代码,然后我们会同样地将它放之后等待︰

IEnumerable<MST> 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 });
赞助商