쿼리를 작동 시키려고 시도했지만 정식으로 어떻게 시도했는지 (또는 가능한 경우) 내가 시도한 모든 작업이 제대로 수행되지 않았는지 확실하지 않습니다.AutoMapper를 사용하는 LINQ GroupBy 집계
Person, PersonVote, PersonCategory, Category, City 및 FirstAdminDivision의 총 6 개 테이블 쿼리.
PersonVote는 사람들을위한 사용자 검토 테이블이며 1-5 (5는 "최상"임)를 허용하는 십진수 인 Vote라는 열을 포함합니다. FirstAdminDivision은 캘리포니아와 같은 미국 주와 동의어입니다. Person 테이블에는 City에 대한 외래 키인 CityId라는 열이 있습니다. 내가 믿는 다른 테이블은 대부분 자명하다. 그래서 나는 필요하다면 언급하지 않을 것이다.
내 목표는 특정 개인의 PersonVote 테이블에 대한 모든 투표의 평균을 기반으로하는 "가장 인기있는"사람들의 목록을 반환하는 쿼리를 만드는 것입니다. 예를 들어 한 사람이 3 표를 갖고 3 표가 모두 "5"이면 목록의 첫 번째 항목이됩니다 ...이 시점에서 2 차 순서를 신경 쓰지 마십시오 ... 예를 들어 ... 대부분의 투표와 같습니다. 동점은 "이기"것입니다.
AutoMapper 없이도이 작업을 수행 할 수 있지만 코드가 매우 깨끗하고 읽기 쉽기 때문에 AM의 ProjectTo 확장 방법을 사용하여 프로젝션을 수행하는 기능이 좋아서 가능한 경우 해당 방법을 사용하기를 원하지만 어떤 행운을 얻지는 못했습니다. 일하다.
여기에 내가 할 일이 있습니다 .... 기본적으로 LINQ의 Select 메서드 대신 ProjectTo가 가능한지 확인하려고합니다.
List<PersonModel> people = db.People
.GroupBy(x => x.PersonId)
.Select(x => new PersonModel
{
PersonId = x.FirstOrDefault().PersonId,
Name = x.FirstOrDefault().Name,
LocationDisplay = x.FirstOrDefault().City.Name + ", " + x.FirstOrDefault().City.FirstAdminDivision.Name,
AverageVote = x.FirstOrDefault().PersonVotes.Average(y => y.Vote),
Categories = x.FirstOrDefault().PersonCategories.Select(y => new CategoryModel
{
CategoryId = y.CategoryId,
Name = y.Category.Name
}).ToList()
})
.OrderByDescending(x => x.AverageVote)
.ToList();
당신이 https://github.com/AutoMapper/AutoMapper/wiki/Queryable-Extensions를 시도? – abatishchev
그래, 필자는 설명서를 검토하고 몇 가지 다른 접근 방식을 시도했지만 아직 실제로 작동하는 것은 없습니다. "IGrouping'2에서 PersonModel으로 맵이 누락되었습니다. Mapper.CreateMap"또는이 중 하나를 사용하여 만듭니다. "지정된 유형 멤버 'AverageVote'가 LINQ to Entities에서 지원되지 않습니다. ". 둘 다 무엇인지 이해하지만, 내가 무엇을했는지 또는 AM의 투영법을 사용하여 원하는 것이 무엇인지를 쿼리를 구성하는 방법을 알지 못합니다. –
user1011627
AM없이 EF 만 사용하여 원하는 쿼리를 구성하고 실행할 수 있었습니까? – abatishchev