首页 > 解决方案 > C# LINQ 投影到一个类

问题描述

我调用了一个 Web 服务,然后我得到了一个 JSON 格式的响应对象。

我想要一个列表中的结果,以便我可以枚举它们。

所以我有这段代码可以按预期工作。

var players = getPlayersResponse.Payload
  .Select(p => new { p.Name, p.Pid, p.Model, p.Ip, p.Gid })
  .ToList();
foreach (var p in players)
{
    Players.Items.Add(p.Name);
}

我想返回一个已知类的列表,所以尝试了以下操作:

var players = getPlayersResponse.Payload
  .Select(p => new Player { Name= p.Name, Pid= p.Pid, Model= p.Model, Ip= p.Ip, Gid= (int)p.Gid })
  .ToList();    
foreach (var p in players)
{
    Players.Items.Add(p.Name);
}

和班级

public class Player
{
  public string Name { get; set; }
  public int Pid { get; set; }
  public string Model { get; set; }
  public string Ip { get; set; }
  public int Gid { get; set; }
}

该版本不起作用(列表框未填充项目),我完全没有错误,编译器也不会抱怨。奇怪的是,如果我没有将 p.Gid 转换为 int,编译器确实会抱怨。在这两种情况下,它是相同的 json 结果。

我看不出我做错了什么。

标签: c#linq

解决方案


我通过改变这样的类解决了这个问题

public class Player
{
   public string Name { get; set; }
   public int Pid { get; set; }
   public string Model { get; set; }
   public string Ip { get; set; }
   public int? Gid { get; set; }
}

推荐阅读