2016-12-30 4 views
1
나는 그룹화 된 쿼리의 투영을하려고 다음과 같은 오류를 받고 있어요

, 그가에서지도를 누락 AutomapperIGrouping`2에서 ModelName으로 누락 된지도가있는 여러 개의 키가있는 GroupBy에 오류가 있습니다. Mapper.CreateMap를 사용하여 만들기 <IGrouping`2, MODELNAME>

를 사용하여, 두 가지 속성에 의해 그룹화 IGrouping`2를 PlayerWarScore에 추가합니다. Mapper.CreateMap < IGrouping`2를 사용하여 만들기, PlayerWarScore>

PlayerWarScore

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; } 
} 

내가 어떻게 Automapper의 Project().To<PlayerWarScore>()를 사용하여 다음 쿼리를 달성 할

public class PlayerWarScore 
{ 
    public string PlayerName { get; set; } 
    public string WarName { get; set; } 
    public int Score { get; set; } 
} 

에 투영하고자하는 다른 모델?

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 기능이 없다는 느낌이 들었습니다. 조합 된 키 모델과 어둠 속의 다른 샷에 대한 엔티티 매핑을 포함하여 시도했지만, 지금까지는 행운이 없었습니다.

답변

2

은 당신의 매핑 작업을하기 위해서는, 당신은 익명 현재처럼 유형 (new {score.Player, score.Battle.War})보다는 GroupBy 키로 PlayerWar를 사용해야합니다 :

context.Scores 
    .GroupBy(score => new PlayerWar { Player = score.Player, War = score.Battle.War }) 
    .ProjectTo<PlayerWarScore>() 
    .ToList(); 
+0

감사합니다,하지만 난 익명 형식을 사용하지 않는 , 나는 당신이 보여준 것을하고있다. (Project()를 제외하고, ()에) 그리고 에러가 발생한다. – Klors

+1

@Klors You *는 익명의 타입을 사용하고있다 :'new {score.Player, score.Battle .War}'. –

+0

글쎄, 게시 한 코드 조각 * 익명 형식, 따라서 대답을 사용합니다. 나는 (AutoMapper v5.2.0과 함께) 게시하기 전에 나의 대답을 테스트했고 작동한다. 'new PlayerWar {...} '를'new {...}'로 변경하면, 당신이 말하는 예외가 생깁니다. –