【问题标题】:Using Linq to select results into a new instance of an object使用 Linq 将结果选择到对象的新实例中
【发布时间】:2020-09-18 18:10:05
【问题描述】:

我有这个 linq 查询,用于连接 _gameContext 中的两个表。

我正在尝试使用 select 创建一个 GameScoresDto 类型的新对象。

但我不断收到一条消息,说 GameScoresDto 没有带 5 个参数的构造函数。

我知道错误的含义,但我认为有一种方法可以使用select 将结果选择到新对象中。

我做错了什么?

谢谢!

[HttpGet("GameScores/{gameId}")]
public async Task<ActionResult<List<GameScoresDto>>> GameScores(Guid gameID)
{
    //var gameScores = await _gameContext.CurrentScores.Where(c => c.GameId == gameID).ToListAsync();

    var gameScores = await (from cs in _gameContext.CurrentScores
                join sm in _gameContext.ScoreMax
                on cs.CurrentScoreId equals sm.CurrentScoreId
                where cs.GameId == gameID
                select 
                    new GameScoresDto ( 
                    cs.ScoreId,
                    cs.GameId,
                    cs.InitialValue,
                    cs.MaximumValue,
                    sm.ActionAmount
                ).ToListAsync();

    return gameScores;
}
    
    

【问题讨论】:

  • 这意味着您正在尝试使用 5 参数(ScoreId、GameId、InitialValue、MaximumValue 和 ActionAmount)调用 GameScoresDto 构造函数,但没有为该类型定义构造函数接受5 参数。
  • 没有看到 GameScoresDto,很难说,但我猜它有 5 个属性,按此顺序,您希望简单地传递它以填充这些属性。如果是这种情况,请尝试使用花括号并按名称设置属性

标签: c# linq asp.net-core asp.net-core-webapi asp.net-core-3.1


【解决方案1】:

这意味着您正在尝试使用 5 参数(ScoreId、GameId、InitialValue、MaximumValue 和 ActionAmount)调用 GameScoresDto 构造函数,但没有为该类型定义使用 5 参数的构造函数.

要解决此问题,请创建一个接受这些 5 参数的构造函数:

public class GameScoreDTO
{
    public GameScoreDTO(int scoreId, int gameId, int initVal, int maxVal, int actionAmt)
    {
        // Set properties from constructor arguments here
    }

    // Other class code omitted
}

或者改用对象初始化语法:

select new GameScoresDto 
{
    ScoreId = cs.ScoreId,
    GameId = cs.GameId,
    InitialValue = cs.InitialValue,
    MaximumValue = cs.MaximumValue,
    ActionAmount = sm.ActionAmount
}

(上面的代码示例假定GameScoresDto 具有指定的属性)

【讨论】:

  • 谢谢!这解决了所有问题,除了我有.ToListAsync(); 的结尾它说GameScoresDto does not contain a definition for ToListAsync
  • 尝试在调用 ToListAsync() 之前为 Select 添加结束 )`
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多