You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将匿名类型IQueryable结果转为自定义GamesWithPlayers列表?

解决匿名类型List转自定义类List的问题

嘿,这个场景我经常碰到,强制转换行不通是因为匿名类型和你自定义的GamesWithPlayers是完全独立的类型,CLR根本不会把它们当成一回事,所以得用LINQ的Select方法来做显式的映射转换,非常简单。

方法一:从已有的匿名类型List转换

如果你已经把IQueryable转成了anonList,直接对这个List用Select遍历每个元素,把匿名对象的属性赋值给GamesWithPlayers的实例,最后调用ToList()就能得到目标列表:

List<GamesWithPlayers> gamesWithPlayers = anonList
    .Select(anonItem => new GamesWithPlayers
    {
        game = anonItem.g,
        gameHasPlayer = anonItem.ghp
    })
    .ToList();

方法二:直接从IQueryable转换(更高效)

其实你完全可以跳过先转成匿名类型List的步骤,直接在原始的IQueryable<匿名类型>上做转换,这样LINQ to Entities会尽量把查询逻辑推送到数据库端执行,性能会更好:

// 这里的x是你的原始IQueryable<匿名类型>
List<GamesWithPlayers> gamesWithPlayers = x
    .Select(anonItem => new GamesWithPlayers
    {
        game = anonItem.g,
        gameHasPlayer = anonItem.ghp
    })
    .ToList();

为什么强制转换会失败?

补充一句:匿名类型是编译器在编译时自动生成的密封类,它和你手动定义的GamesWithPlayers没有任何继承或实现关系,也不是同一类型,所以直接用(List<GamesWithPlayers>)强制转换必然会抛出InvalidCastException,必须通过显式的属性映射来完成类型转换。

内容的提问来源于stack exchange,提问作者jamheadart

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:56:15