return (from product in db.Products
from orderedProduct in db.OrderedProducts
where orderedProduct.ProductID == product.ProductID
group orderedProduct by product into productGroups
select new
{
product = productGroups.Key,
numberOfOrders = productGroups.Count()
}
).OrderByDescending(x => x.numberOfOrders).Distinct().Take(10);
Vi darà 10 articoli, ogni oggetto contiene oggetto prodotto e numeroOdiOrders intero.
Edit:
Dal momento che questo sarà come valore di ritorno di un metodo, e dal momento che C# non consente la restituzione di un tipo anonimo (ancora .. Questa funzionalità è in C# 4.0), si converte il tipo anonimo in una classe.
creare una classe del tipo che si desidera tornare
public class ProductOrders
{
public ProductOrders() {
}
public Product product { get; set; }
public int numberOfOrders { get; set; }
}
e utilizzare questa query per restituire gli oggetti di quella classe
return (from product in db.Products
from orderedProduct in db.OrderedProducts
where orderedProduct.ProductID == product.ProductID
group orderedProduct by product into productGroups
select new ProductOrders
{
product = productGroups.Key,
numberOfOrders = productGroups.Count()
}
).OrderByDescending(x => x.numberOfOrders).Distinct().Take(10);
Il valore di ritorno è ora di tipo IEnumerable<ProductOrders>
.
È possibile trovare questa domanda utile: http://stackoverflow.com/questions/1322675/linq-keyword-search-with-orderby-relevance-based-on-count-linq-to-sql –