如何将匿名类型列表推送到已定义类型列表

时间:2019-11-29 07:42:09

标签: c#

我从查询中返回了一个IQueryable Anonymous类型,格式为:

EntityQueryable<<>f__AnonymousType1<g = Game, ghp = GameHasPlayer>>

我正在尝试构造一个类来接受此查询结果,以便我可以轻松地对其进行操作

public class GamesWithPlayers
{
    public Game game { get; set; }
    public GameHasPlayer gameHasPlayer { get; set; }
}

我已经设法通过使用

将匿名类型压缩为我更容易识别的类型
var anonList = x.ToList() //Where x is the IQueryable of anonymous type`

我知道如何像这样填充我的包含类的一个实例:

GamesWithPlayers a = new GamesWithPlayers() { game = anonList[0].g, gameHasPlayer = anonList[0].ghp };

但是有没有办法将整个anonList放入新的List<GamsWithPlayers>中?

我尝试投射

List<GamesWithPlayers> gamesWithPlayers = (List<GamesWithPlayers>)y;

但是显然没有分配game = g, gameHasPlayers = ghp,我也不知道该使用什么语法:/

1 个答案:

答案 0 :(得分:5)

您想将IEnumerable<T>的每个元素转换为其他元素。这正是Select的作用。

您已经证明,给定匿名类的对象x,可以像这样从其中创建一个GamesWithPlayers

new GamesWithPlayers() { game = x.g, gameHasPlayer = x.ghp }

您可以将此表达式传递给Select

var gamesWtihPlayersList = 
    anonList
    .Select(x => new GamesWithPlayers() { game = x.g, gameHasPlayer = x.ghp })
    .ToList();

这将应用于anonList中的每个元素。