2014-01-19 34 views
-1

我有查詢的SQL:計數和查詢別名與實體框架

select top 10 NAME, count(*) as Number 
from Products as pro 
join Orders as ord on ord.ID_PRODUCT = pro.ID 
group by NAME 
order by Number desc 

需要在實體框架來編寫這些代碼。 如何寫?

+1

你試過了什麼?如果你完全卡住了,也許看一些例子:http://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b –

回答

1

試試這個

var result = dbContext.Products 
         .GroupBy(p => p.Name) 
         .Select(g => new { Name = g.Key, Number = g.Count()} 
         .OrderByDescending(x => x.Number) 
         .Take(10) 

如果你指望每個產品的訂單數,那麼試試這個

var result = dbContext.Orders 
         .GroupBy(o => o.Product.Name) 
         .Select(g => new { Name = g.Key, Number = g.Count()} 
         .OrderByDescending(x => x.Number) 
         .Take(10) 
0

好了 - 我沒有測試這一點,但它應該做的,你需要

var result =  
    (
     from q2 in 
     (
     from q1 in 
     (
      from p in Products 
      join o in orders on p.ID equals o.ID_PRODUCT 
      select p.NAME 
     ) 
     group q1 by q1 into grp 
     select new{NAME = grp.Key, Number = grp.Count()} 
     ) 
    orderby q2.Number descending 
    select q2 
    ).Take(10); 
  • 你這裏有訂單和產品作爲最內側的查詢(Q1)之間的連接是什麼。
  • 我們只在乎選擇名稱(重複每個訂單),因此該行select p.NAME
  • 這是通過聲明與組分組 - 我們得到選擇鍵(正由分組的事情 - 在這種情況下, NAME)以及該組中的項目計數。這成爲子查詢q2。
  • 最後,我們通過數量降序排列Q2和使用。取(10),以獲得前10名。