在Entity Framework中获取表的前N行

时间:2011-06-06 10:55:07

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

我遇到了一个我遇到的问题。 其中,我的数据库中有这些表格:

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

我希望在MVC2中使用Entity Framework获得十大销售产品。我怎样才能做到这一点?

/////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////////////// 按照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()));
}

这是正确的方法吗?

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

  1. 加入产品和客户
  2. 将它们分组并获得每位客户的产品数量
  3. 按计数降序。
  4. 排在前十位
  5. 获取结果产品的名称(前10名)