小编use*_*627的帖子

LINQ GroupBy 与 AutoMapper 的聚合

试图让查询起作用,但老实说,我不确定如何(或者甚至可能)进行查询,因为我尝试过的一切都没有奏效。

一共查询6个表:Person、PersonVote、PersonCategory、Category、City、FirstAdminDivision。

PersonVote 是一个用户评论表,包含一个名为 Vote 的列,它是一个接受 1-5 值的小数(5 是“最佳”)。FirstAdminDivision 将是美国各州的同义词,例如加利福尼亚。Person 表有一个名为 CityId 的列,它是 City 的外键。我认为其他表格大多是不言自明的,因此除非需要,否则我不会发表评论。

我的目标是创建一个查询,该查询返回“最受欢迎”人员的列表,该列表将基于 PersonVote 表上特定人员的所有投票的平均值。例如,如果一个人有 3 票并且所有 3 票都是“5”,那么他们将在列表中排在第一位......此时并不真正关心二级排序......例如......就像大多数投票一样平局会“赢”。

我在没有 AutoMapper 的情况下也能工作,但我喜欢 AM 使用 ProjectTo 扩展方法进行投影的能力,因为代码非常干净和可读,如果可能的话,我更愿意使用这种方法,但没有任何运气让它工作。

这是我所拥有的确实有效......所以基本上,我想看看这是否可以用 ProjectTo 而不是 LINQ 的 Select 方法。

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 …
Run Code Online (Sandbox Code Playgroud)

c# linq automapper

5
推荐指数
1
解决办法
5290
查看次数

标签 统计

automapper ×1

c# ×1

linq ×1