投影具有多个键的 GroupBy 错误,缺少从 IGrouping`2 到 ModelName 的映射。使用 Mapper.CreateMap<IGrouping`2, ModelName> 创建
Projecting a GroupBy with multiple keys errors with Missing map from IGrouping`2 to ModelName. Create using Mapper.CreateMap<IGrouping`2, ModelName>
尝试使用 Automapper
对按两个属性分组的分组查询进行投影时出现以下错误
Missing map from IGrouping`2 to PlayerWarScore. Create using Mapper.CreateMap<IGrouping`2, PlayerWarScore>
我目前正在尝试类似的方法,如果 PlayerWar
是 Score
的实体 属性,则效果很好
Mapper.CreateMap<IGrouping<PlayerWar, Score>, PlayerWarScore>
.ForMember(model => model.PlayerName, model => model.MapFrom(grouping => grouping.Key.Player.Name))
.ForMember(model => model.WarName, model => model.MapFrom(grouping => grouping.Key.War.Name)),
.ForMember(model => model.Score, model => model.MapFrom(grouping => grouping.Sum(score => score.Score));
但是当 PlayerWar
不是一个实体,而是一个模型,它只是为了保存由两个实体组成的组合键而创建的,如下所示,然后我得到错误
public class PlayerWar
{
public Player Player { get; set; }
public War War { get; set; }
}
例如,我想要实现的是,给定以下 EF6 实体。
public class Score
{
public Player Player { get; set; }
public Battle Battle { get; set; }
public int Score { get; set; }
}
public class Player
{
public string Name { get; set; }
}
public class Battle
{
public string Name { get; set; }
public War War { get; set; }
}
public class War
{
public string Name { get; set; }
}
以及我希望将它们投射到的另一个模型
public class PlayerWarScore
{
public string PlayerName { get; set; }
public string WarName { get; set; }
public int Score { get; set; }
}
如何使用 Automapper 的 Project().To<PlayerWarScore>()
实现以下查询?
context.Scores
.GroupBy(score => new {score.Player, score.Battle.War})
.Select(grouping => new PlayerWarScore {
PlayerName = grouping.Key.Player.Name,
WarName = grouping.Key.War.Name,
Score = grouping.Sum(score => score.Score)
})
.ToList()
我感觉我正在以错误的方式接近它,或者缺少一个明显的 Linq 功能,可以使它变得简单。我已经尝试将实体映射到组合关键模型和其他黑暗中的镜头,但到目前为止没有任何运气。
为了使您的映射工作,您需要使用 PlayerWar
作为 GroupBy
密钥,而不是像您当前那样使用匿名类型 (new {score.Player, score.Battle.War}
):
context.Scores
.GroupBy(score => new PlayerWar { Player = score.Player, War = score.Battle.War })
.ProjectTo<PlayerWarScore>()
.ToList();
尝试使用 Automapper
对按两个属性分组的分组查询进行投影时出现以下错误Missing map from IGrouping`2 to PlayerWarScore. Create using Mapper.CreateMap<IGrouping`2, PlayerWarScore>
我目前正在尝试类似的方法,如果 PlayerWar
是 Score
Mapper.CreateMap<IGrouping<PlayerWar, Score>, PlayerWarScore>
.ForMember(model => model.PlayerName, model => model.MapFrom(grouping => grouping.Key.Player.Name))
.ForMember(model => model.WarName, model => model.MapFrom(grouping => grouping.Key.War.Name)),
.ForMember(model => model.Score, model => model.MapFrom(grouping => grouping.Sum(score => score.Score));
但是当 PlayerWar
不是一个实体,而是一个模型,它只是为了保存由两个实体组成的组合键而创建的,如下所示,然后我得到错误
public class PlayerWar
{
public Player Player { get; set; }
public War War { get; set; }
}
例如,我想要实现的是,给定以下 EF6 实体。
public class Score
{
public Player Player { get; set; }
public Battle Battle { get; set; }
public int Score { get; set; }
}
public class Player
{
public string Name { get; set; }
}
public class Battle
{
public string Name { get; set; }
public War War { get; set; }
}
public class War
{
public string Name { get; set; }
}
以及我希望将它们投射到的另一个模型
public class PlayerWarScore
{
public string PlayerName { get; set; }
public string WarName { get; set; }
public int Score { get; set; }
}
如何使用 Automapper 的 Project().To<PlayerWarScore>()
实现以下查询?
context.Scores
.GroupBy(score => new {score.Player, score.Battle.War})
.Select(grouping => new PlayerWarScore {
PlayerName = grouping.Key.Player.Name,
WarName = grouping.Key.War.Name,
Score = grouping.Sum(score => score.Score)
})
.ToList()
我感觉我正在以错误的方式接近它,或者缺少一个明显的 Linq 功能,可以使它变得简单。我已经尝试将实体映射到组合关键模型和其他黑暗中的镜头,但到目前为止没有任何运气。
为了使您的映射工作,您需要使用 PlayerWar
作为 GroupBy
密钥,而不是像您当前那样使用匿名类型 (new {score.Player, score.Battle.War}
):
context.Scores
.GroupBy(score => new PlayerWar { Player = score.Player, War = score.Battle.War })
.ProjectTo<PlayerWarScore>()
.ToList();