首页 > 解决方案 > 使用 Linq 将结果选择到对象的新实例中

问题描述

我有这个 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;
}
    
    

标签: c#linqasp.net-coreasp.net-core-webapiasp.net-core-3.1

解决方案


这意味着您正在尝试GameScoresDto使用参数(ScoreId、GameId、InitialValue、MaximumValue 和 ActionAmount)调用构造5函数,但没有为该类型定义带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具有指定的属性)


推荐阅读