【问题标题】:Fetch top N rows of the table in Entity Framework在实体框架中获取表的前 N ​​行
【发布时间】:2011-06-06 10:55:06
【问题描述】:

我有点被我遇到的问题所困扰。 其中,我的数据库中有这些表:

Product (int productId, ...otherProductInfo)
Customer (int customerId, ...otherCustomerInfo)
SoldToData ( int productId, int customerId)

我想在 MVC2 中使用实体框架获得十大畅销产品。我怎样才能做到这一点?

/////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////////////////// ///////////////////////////// 按照 thekip 和 Pr0fess0rX 的建议,这是我到目前为止所做的,它似乎正在工作:

using (Entities db = new Entities())
{
    var groupedProducts = (from p in db.Products
                        join s in db.SoldToData
                            on p.productId equals s.productId
                        group p by p.id
                            into ProductGroup
                            orderby ProductGroup.Count() descending
                            select ProductGroup).Take(10).ToList();
     List<Products> products = new List<Products>();
     products.AddRange(groupedProducts.Select(gp => gp.First()));
}

这是正确的方法吗?

【问题讨论】:

  • 遵循 thekip 和 Pr0fess0rX 的建议,这就是我到目前为止所做的,它似乎正在工作:using (Entities db = new Entities()) { var groupedProducts = (from p in db.Products join s in db.SoldToData on p.productId equals s.productId group p by p.id into ProductGroup orderby ProductGroup.Count() descending select ProductGroup).Take(10).ToList(); List&lt;Products&gt; products = new List&lt;Products&gt;(); products.AddRange(groupedProducts.Select(gp =&gt; gp.First())); } 这是正确的方法吗?

标签: c# entity-framework asp.net-mvc-2


【解决方案1】:

如果您有一个 IQueryable 来查询数据源,您可以使用 orderby 等进行排序,然后使用 Take(10)?

【讨论】:

  • 嘿thekip。感谢您的快速回复。我还没有使用 IQueryable。我只是快速浏览了一下。能给我举个例子吗?
  • 如何从数据库中获取单行?例如,如何通过 ID 获取产品?当使用实体框架(或任何其他 ORM)时,我当然会使用 IQueryable 来访问我的数据库。
  • using (Entities db = new Entities()) { var product = (from p in db.Product where p.productId==id select a).Single(); }
  • 好吧,假设你有这个,你可以加入这个 SoldToData。您可以按 SoldToData 分组,按数量排序,Take 10 以获取前 10 个(畅销)产品
【解决方案2】:
  1. 同时加入产品和客户
  2. 将它们分组并获取每个客户的产品数量
  3. 按计数降序排列。
  4. 进入前 10 次
  5. 获取结果产品的名称(前 10 名)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多