Самые популярные GroupBy с Linq to Entities - PullRequest
1 голос
/ 26 февраля 2010

У меня есть стандартная схема магазина с таблицей InvoiceLine, которая содержит продукты. Я хотел бы получить список 5 лучших продуктов по продажам в виде списка. Какой самый чистый способ сделать это? Это не может быть лучшим способом:

    private List<Product> GetTopProducts(int count)
    {
        var topProducts = from invoiceLine in storeDB.InvoiceLines
                        group invoiceLine by invoiceLine.ProductId into grouping
                        orderby grouping.Count() descending
                        select new 
                        {
                            Products = from Product in storeDB.Products 
                            where grouping.Key == Product.ProductId
                            select Product
                        };
        return topProducts.AsEnumerable().Cast<Product>().Take(count).ToList<Product>();
    }

Ответы [ 2 ]

1 голос
/ 26 февраля 2010

Очистить еще, добавив связь между Product и InvoiceLine в конструкторе - создает свойство Product.InvoiceLines.

List<Product> result = storeDB.Products
  .OrderByDescending(p => p.InvoiceLines.Count())
  .Take(count)
  .ToList();
1 голос
/ 26 февраля 2010

Я не могу точно это проверить, но вы можете просто сгруппировать по сгенерированному свойству "Product"?

return (from i in storeDB.InvoiceLines
                   group i by i.Product into g
                   orderby g.Count() descending
                   select g.Key)
    .Take(count).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...