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);
これは、10個のアイテム、各アイテムに製品オブジェクト、numberOfOrdersの整数を示します。
編集:
これは、メソッドの戻り値のようになりますので、およびC#が、匿名型を返すことはできません(まだ..この機能は、C#4.0である)ことから、あなたは変換しますクラスへの匿名型。
あなたは
public class ProductOrders
{
public ProductOrders() {
}
public Product product { get; set; }
public int numberOfOrders { get; set; }
}
を返し、戻り値は、現在のタイプIEnumerable<ProductOrders>
であり、そのクラスのオブジェクト
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);
を戻すには、このクエリを使用するタイプのクラスを作成します。
この質問は役に立ちます: http://stackoverflow.com/questions/1322675/linq-keyword-search-with-orderby-relevance-based-on-count-linq-to-sql –