使用linq降低平均值

时间:2016-02-05 06:55:49

标签: c# entity-framework linq

我遇到了实体框架的问题。我正在尝试按照其中一个键的平均值对我的集合进行排序:

var userPhotos = Database.Set<Photo>().Where(p => string.IsNullOrEmpty(userId) || p.ClientProfileId == userId);
usersPhotos = usersPhotos.OrderByDescending(item => item.Votes.Average());`

在最后一行代码中,我有“LINQ to Entities不支持指定的类型成员'投票'。仅支持初始值设定项,实体成员和实体导航属性。” execpetion。 我的会员投票看起来像这样:

public class Photo : BaseEntity, IEntity<Guid>
{
    public Photo()
    {
        Id = Guid.NewGuid();
        Votes = new List<double>;
    }
    [Key]
    public Guid Id { get; set; }
    //Other fields
    public ICollection<double> Votes { get; set; }
}

如何解决我的问题,并根据该成员的重视值进行排序?

2 个答案:

答案 0 :(得分:1)

你需要的只是第一行末尾的ToList()。

你可以这样做;

var userPhotos = Database.Set<Photo>().Where(p => string.IsNullOrEmpty(userId) || p.ClientProfileId == userId).ToList();
var sortedUsersPhotos = usersPhotos.Where(p=>p.Votes!=null && p.Votes.Any()).OrderByDescending(item => item.Votes.Average());

答案 1 :(得分:0)

您可以使用GroupBy:

var sorted = userPhotos.GroupBy(item => item.Votes.Average()).OrderByDescending(item => item.Key);

如果您想使用相同的对象:

userPhotos = userPhotos.GroupBy(item => item.Votes.Average()).OrderByDescending(item => item.Key).SelectMany(x=>x);