如何使用实体框架.average()方法获得平均星级评分

时间:2014-07-24 12:00:01

标签: asp.net-mvc entity-framework asp.net-mvc-4

我是mvc和实体框架的新手,我为产品开发了一个星级评分系统。我试图获得产品的平均星级评分,我建立了这样的数据库:

用户表:UserID PK,UserName,StarRatingDetails FK

产品表:ProdactID PK,ProudactName,StarRatingDetails FK

StarRatingDetails:ProdactID PK1,UserID PK2,VoteValue

所以我试图使用像这样的实体框架.average()方法获得平均星级率:

   var products = db.Products.Include(p => p.StarRatingDetail).ToList();
   var voteCounts = db.StarRatingDetail.ToList();

         foreach (var av in voteCounts)
        {
            var avarage = new { starAvarage = Convert.ToInt32(voteCounts.Average(avv => avv.VoteValue)) };

        }

它可以运行并获得产品的每个平均星级费率,但是如何将平均费率与正确的产品相关联并将其发送到视图?如果有任何其他方式,我将非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

假设Product1..*有<{1}}的关系

StartRatingDetail

注意 - 如果集合为空,var productWithVotes = db.Products.Include(p => p.StarRatingDetail) .Select(x => new { Product = x, VoteAverage = x.StarRatingDetail.Average(r => r.VoteValue) }); 将抛出异常,因此在调用之前可能需要检查

Average

Live example