クエリを動作させようとしていますが、試したことがすべてうまくいっていないので、正直なところ、どうすればいいかわかりません。LINQ GroupBy AutoMapperを使用した集約
Person、PersonVote、PersonCategory、Category、City、およびFirstAdminDivisionの合計6つのテーブルを照会します。
PersonVoteは人のユーザーレビューテーブルで、1-5の値を受け入れる小数点以下の桁(Vote)という列が含まれています(5が「最高」です)。 FirstAdminDivisionはカリフォルニア州のような米国の州と同義です。 Personテーブルには、Cityへの外部キーであるCityIdという列があります。私が信じている他のテーブルはほとんど自明なので、必要がない限りコメントはしません。
私の目標は、特定の人物のPersonVoteテーブルのすべての投票の平均に基づく「最も人気のある」人物のリストを返すクエリを作成することです。例えば、ある人が3票を持っていて、3票がすべて「5」であれば、それらはリストの最初のものになります...この時点で二次秩序については本当に気にしません。ネクタイが「勝つ」。
私はAutoMapperを使わないでこの作業をしていますが、ProjectTo拡張メソッドを使用してAMの機能を使用することが大好きです。コードはきれいで読みやすいので、可能ならばその方法を使用したいが、働く
ここで私は動作しています....基本的に、私はこれが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のProjectionを使って私が望むものが可能であるかどうかわかりません。 –
user1011627
AMなしでEFのみを使用して目的のクエリを構築して実行できましたか? – abatishchev