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; }
}
,并使用该查询返回该类
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);
返回值是现在式IEnumerable<ProductOrders>
的对象的类型。
你会发现这个问题非常有用: http://stackoverflow.com/questions/1322675/linq-keyword-search-with-orderby-relevance-based-on-count-linq-to-sql – 2009-09-07 00:42:56