c# - 使用 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;
}
解决方案
这意味着您正在尝试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
具有指定的属性)
推荐阅读
- python - 如何自动化 python 在 matplotlib 中创建图形
- html - 在Angular 8中单击后更改按钮的背景?
- laravel - 我正在使用带有 curl 的 indiasms 的 api 来发送短信,但是在发送短信后,一些联系人会收到短信内容的修剪,但有些联系人会收到正确的内容
- netlogo - Netlogo:两个具有相同代码的文件:一个有效,另一个标记错误
- c++ - MYSQL 检查重复的 C++
- javascript - 循环旋转木马中的 Coverflow 动画卡顿
- node.js - 无法使用 multer 在 nodejs 中发布空图像文件
- java - 为什么上部转换对象无法访问子类中覆盖的静态方法
- shell - RPM Build,如何在“%post”宏运行的shell脚本中获取RPM包的路径“rpm -ivh”
- javascript - AJAX 响应表单上的 AJAX 无限 preventDefault() (vanilla JS)