gpt4 book ai didi

c# - 在 EF6 中将匿名类型转换为 IEnumerable<>

转载 作者:太空宇宙 更新时间:2023-11-03 18:26:49 25 4
gpt4 key购买 nike

我正在使用 Entity Framework 开发 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();

但它给了我错误

Cannot implicitly convert type 'System.Collection.Generic.List<Anonymous#1>' to 'System.Collection.Generic.IEnumerable<<MST>>'

我该如何解决?

最佳答案

首先你不需要 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<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() 在所有这些之后,以获得您真正想要的类型的列表)。

如果您使用的是异步代码,那么我们同样会将其放在 await 之后:

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 });

关于c# - 在 EF6 中将匿名类型转换为 IEnumerable<>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32693577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com