【问题标题】:How to get top 5 products with highest views?如何获得浏览量最高的前 5 名产品?
【发布时间】:2015-03-02 20:32:27
【问题描述】:

我是 LINQ 新手,正在尝试使用 MVC 和 LINQ 构建网站。我想展示观看次数最多的前 5 个产品。我有 2 个如下表,我尽可能简单地解释。

PRODUCT
-------
ID
NAME

PRODUCT_VIEWS_TABLE
-------
ID
PRODUCT_ID

每次查看产品时,我都会在 PRODUCT_VIEWS_TABLE 中插入一个新行。我该如何为此编写 LINQ 查询?

(from c in db.PRODUCT select c).Take(5)

【问题讨论】:

    标签: c# .net asp.net-mvc linq


    【解决方案1】:

    这个怎么样:

    var top5 = productViews
                 .GroupBy(view => view.ProductId)   // group views by product
                 .OrderByDescending(g => g.Count()) // order from most- to least-viewed
                 .Take(5)                           // take the top 5
                 .Select(g => g.First().Product);   // fetch the corresponding product
    

    【讨论】:

    • 问题中没有规定。
    • 我刚刚提到要了解更多信息,+1 以获得更简单的 LINQ
    【解决方案2】:
    var topProductsIds = db.PRODUCT_VIEWS_TABLE // table with a row for each view of a product
        .GroupBy(x => x.PRODUCT_ID) //group all rows with same product id together
        .OrderByDescending(g => g.Count()) // move products with highest views to the top
        .Take(5) // take top 5
        .Select(x => x.Key) // get id of products
        .ToList(); // execute query and convert it to a list
    
    var topProducts = db.PRODUCTS // table with products information
        .Where(x=> topProductsIds.Contains(x.ID)); // get info of products that their Ids are retrieved in previous query
    

    【讨论】:

    • .Select() 和 .OrderByDescending() 行不编译。
    • 首先 .Select 从顶部开始,然后 ..OrderByDescending 在其下方。它说“无效的匿名......”
    【解决方案3】:

    试试这个:

    var topProducts = m_context.PRODUCTS
        .Join(m_context.PRODUCT_VIEW, product=> product.Id, view => view.ProductId,
            (product, view ) => new { ProductId = product.Id, ViewId = view.Id})
        .GroupBy(g => g.ProductId)
        .Select(s => new {
            Id = s.Key,
            ViewCount= s.Count()
        })
        .OrderByDescending(o => o.ViewCount)
        .Take(5).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多