Linq加入计数选择

时间:2016-05-02 18:53:34

标签: c# .net linq join count

我有这个简单的代码返回产品列表,但现在我需要以某种方式获取相同的产品,但我需要根据视图计数添加新的列或值。

var products = db.Products.Where(p => p.ProductOwnerUserId == userID).OrderByDescending(p => p.ProductID);

这是我到目前为止,但我不是LINQ的专家,所以我想知道是否有人可以帮助我。

这是我正在寻找的一种伪代码

var products = from p in db.Products
               join pr in db.Reviews on p.ProductID equals pr.ReviewForProductID 
               into g select new 
               {
                    p.*,
                    ProductView = g.Count(a => a.ReviewForProductID)
               }; 

我已经找到了我自己的答案,因为你们没有提出任何问题...但是对于最初的提示而言,这是非常新的...我很新的linq和复杂的查询很难理解并适合现有的代码/视图

这是我的解决方案:

感谢您的第一个答案,对于第二个问题来说太糟糕了,从来没有来过......仅供参考,因为我的产品类是一个部分类,已经添加了另一个新的ProductView.cs部分类,其中包含新的Property和我的查询(functionnal和tests)现在看起来像这样:

var products = (from p in db.Products
              join pr in db.Reviews on p.ProductID equals pr.ReviewForProductID
              into g
              select new GenericEcomDataAccess.Product
              {
                  ProductID = p.ProductID,
                  ProductOwnerUserId = p.ProductOwnerUserId,
                  ProductCurrency = p.ProductCurrency,
                  ProductDescription = p.ProductDescription,
                  ProductPrice = p.ProductPrice,
                  ProductImage = p.ProductImage,
                  ProductName = p.ProductName,
                  ProductCount = g.Count()
              }).Where(p => p.ProductOwnerUserId == userID)
              .OrderByDescending(p => p.ProductID).AsEnumerable();       

1 个答案:

答案 0 :(得分:0)

var products = db.Products.Where(p => p.ProductOwnerUserId == userID)
             .OrderByDescending(p => p.ProductID)
             .Select(p=> new {Product = p, Count = p.Reviews.Count()});

如果您正确设置了外键