【问题标题】:Linq join count selectLinq 连接计数选择
【发布时间】:2016-08-27 15:20:40
【问题描述】:

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

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 部分类,其中包含新的属性和我的查询(功能和测试)现在看起来像这样:

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();       

【问题讨论】:

    标签: c# .net linq join count


    【解决方案1】:
    var products = db.Products.Where(p => p.ProductOwnerUserId == userID)
                 .OrderByDescending(p => p.ProductID)
                 .Select(p=> new {Product = p, Count = p.Reviews.Count()});
    

    如果您正确设置了外键

    【讨论】:

    • 我的下一个问题是:M 视图正在使用这个@model IEnumerable 但不是我坚持使用正确的查询,而是使用匿名类型!?如何将此匿名类型转换回产品列表?我试图删除“新”指令但没有成功。有人可以帮忙吗?我只需要一个产品列表,但添加另一个信息“计数”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2015-12-19
    相关资源
    最近更新 更多