Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将linq与聚合、联接和分组方式一起使用_C#_Linq - Fatal编程技术网

C# 如何将linq与聚合、联接和分组方式一起使用

C# 如何将linq与聚合、联接和分组方式一起使用,c#,linq,C#,Linq,我试图通过id和名字来获得餐厅的平均评级 重新分配的数量 复习课 public int ReviewId { get; set; } public double Rating { get; set; } [ForeignKey("ResterauntId")] Resteraunt Resteraunt { get; set; } public int ResterauntId { get; set; } publi

我试图通过id和名字来获得餐厅的平均评级 重新分配的数量

复习课

  public int ReviewId { get; set; }
        public double   Rating { get; set; }
        [ForeignKey("ResterauntId")]
        Resteraunt  Resteraunt { get; set; }
        public int ResterauntId { get; set; }
  public int ResterauntId { get; set; }
        public string Name { get; set; }

        public virtual ICollection<Review> Reviews { get; set; }
        public virtual Review  reviews{ get; set; }
重新安装类

  public int ReviewId { get; set; }
        public double   Rating { get; set; }
        [ForeignKey("ResterauntId")]
        Resteraunt  Resteraunt { get; set; }
        public int ResterauntId { get; set; }
  public int ResterauntId { get; set; }
        public string Name { get; set; }

        public virtual ICollection<Review> Reviews { get; set; }
        public virtual Review  reviews{ get; set; }

您需要按餐厅(id)分组,并平均每个餐厅的评分。由于LINQ有组联接,您只需使用
Join
即可获得分组:

var avgRatings = (from res in resteraunts
                  join rev in reviewsList on res.ResterauntId equals
                  rev.ResterauntId into revj
                  select new { res.ResterauntId, AveraRating = revj.Average(r => r.Rating) }).ToList();
仔细观察您的(部分)类,我发现您显然在使用实体框架,在这种情况下,您不需要手动加入:

var avgRatings = (from res in resteraunts
                  select new {
                      res.ResterauntId,
                      AveraRating = res.Reviews.Average(r => (double?)r.Rating)
                  }).ToList();

得益于@gnud,平均值有所提高。

您知道
关键评级的类型吗?你明白为什么不能应用
Average
?@NetMage它是一个双精度类型,因此没有
double.Average
函数。如果你的InvalidOperationException说“物化值为空”,这是因为一些餐厅没有评论,因此没有平均值。将平均调用替换为
revj.average(r=>(double?)r.Rating)
,没有任何平均值的调用将具有
AverageRating==null
(如果您的评级为int,则转换为
int?
)@gnud非常好<代码>评级
为双精度。