如何在 Linq 中获取结果列表

钦迪楚

我正在获取一个计数列表,根据条件平均并返回所有结果。看起来我的命令太错误了。我还不知道该怎么做。我有表:

在此处输入图片说明

在此处输入图片说明

var qr = (from Product c in _context.Products
                      join o in _context.RatingProducts on c.ID equals o.IDProduct
                      where c.Status == true
                      orderby c.NumProduct
                      group o by c.ID into g
                      select new {
                          ProductId = g.Key,
                          CountID = g.Count(),
                          //SumID = g.Sum(s => s.StarRating).ToString(),
                          AveragedID = g.Count() > 0 ? g.Average(x => x.StarRating) : 0
                      }).ToList();

        var getqr = _context.Products.Where(a => a.Status).ToList();

        int count = 0;
        double averaged = 0;

        foreach (var item in getqr)
        {
            int key = item.ID;
            var id = qr.Where(x => x.ProductId == key).FirstOrDefault();
            if(id != null)
            {
                count = id.CountID;
                averaged = Math.Round(id.AveragedID,1);
            }
            var productquery = item;
        }

        var query = from c in qr
                    join p in getqr on c.ProductId equals p.ID
                    select new ProductQuery
                    {
                        ID = p.ID,
                        IDProduct = p.IDProduct,
                        CategoryID = p.CategoryID,
                        NumProduct = p.NumProduct,
                        Name = p.Name,
                        Status = p.Status,
                        Price = p.Price,
                        PriceOld = p.PriceOld,
                        ContentsSmall = p.ContentsSmall,
                        Contents = p.Contents,
                        Images = p.Images,
                        CountID = count,
                        //SumID = c.SumID,
                        AveragedID = averaged,
                    };

        return query.ToList();

但是,当我调试时,它只显示行 ID = 1 的一个结果。我想显示列表:计数,表 1 的平均结果。Tks。

格里高利昂艺术

据我了解你应该在LEFT JOIN这里做,所以需要DefaultIfEmpty在初始查询中添加,并稍微改变平均计数逻辑。

像这样的东西,应该工作:

var qr = (from Product c in _context.Products
                  join o in _context.RatingProducts on c.ID equals o.IDProduct into productRatings
                  from pr in productRatings.DefaultIfEmpty()
                  where c.Status == true
                  orderby c.NumProduct
                  group o by c.ID into g
                  select new {
                      ProductId = g.Key,
                      CountID = g.Count(),
                      AveragedID = g.Average(x => x == null ? 0 : x.StarRating)
                  }).ToList();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章