我越來越想做一個分組查詢的投影時,下面的錯誤,這是由兩個屬性分組,使用Automapper使用從IGrouping`2到ModelName的Missing映射投影GroupBy時出現多個鍵錯誤。創建使用Mapper.CreateMap <IGrouping`2,MODELNAME>
缺少從地圖IGrouping`2到PlayerWarScore。創建使用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功能,它可以使它變得簡單。我已經嘗試過將實體映射到黑暗中的組合鍵模型和其他鏡頭,但迄今沒有任何運氣。
謝謝,但我不使用匿名類型,我正在做你已經顯示的內容(除了Project()。()),並給出錯誤 –
Klors
@Klors你*使用匿名類型:'new {score.Player,score.Battle .WAR}'。 –
好吧,你發佈的代碼片段*使用匿名類型,因此是答案。我在發佈之前測試了我的答案(使用AutoMapper v5.2.0),並且它可以正常工作。如果我將'new PlayerWar {...}'更改爲'new {...}',那麼我會得到你所說的異常。 –