2012-12-11 36 views
0

我試圖實現下面的SQL查詢,它以我需要它進入LINQ的方式工作。我有兩個單獨的SQL查詢,我加入並選擇產品,如果組價格大於單個價格。我正在使用LINQ來創建對象,併爲採購和產品表提供了一個對象工廠。在C#中使用objectFactory加入2個獨立的LINQ查詢

select DISTINCT(a.Name) from 
(select p.Prod_ID, p.Name, SUM(p.Price) as Total 
from Tb_AvailableProduct p, Tb_Purchases o 
where p.Prod_ID = o.Prod_ID 
group by p.Prod_ID, p.Name) a 
JOIN 
(select p.Prod_ID, p.Price 
from Tb_AvailableProduct p, Tb_Purchases o 
where p.Prod_ID = o.Prod_ID) b 
on a.Prod_ID = b.Prod_ID 
where a.Total > b.Price 

我在LINQ的這個第一次查詢,但我只是想選擇一個產品名稱,如果該產品的集體漲價高於產品的個別價格更高..即一個以上的產品已經賣出。我試圖用一筆數字來完成這個任務,而不是使用一個計數。

from o in this.myObjectFactory.ThePurchases 
join p in this.myObjectFactory.TheProducts.Values 
on o.ProductID equals p.ProductID 
where o.CustomerID == customer.CustomerID 
group p by p.ProductID into query1 
select new { ProductID = query1.Key, TotalPurchasesThisYear = query1.Sum (p => p.Price)}); 
+1

什麼是您的SQL的第一選擇查詢的WHERE子句做?像這樣'where p.Prod_ID,p.Name' – FosterZ

+0

我弄亂了我的Group By和Where,我糾正了編輯。感謝FosterZ – JasonTheLucky

回答

1

像這樣的東西或許應該工作(它非常類似於你的SQL查詢):

var result = 
    from a in 
     (
      from p in TheProducts 
      join o in ThePurchases 
      on p.ProductID equals o.ProductID 
      group p by new { p.ProductID, p.Name, p.Price } into g 
      select new 
      { 
       ProductID = g.Key.ProductID, 
       Name = g.Key.Name, 
       Total = g.Sum(i => i.Price) 
      } 
     ) 
    join b in 
     (
      from p in TheProducts 
      join o in ThePurchases 
      on p.ProductID equals o.ProductID 
      select new 
      { 
       ProductID = p.ProductID, 
       Price = p.Price 
      } 
     ) 
    on a.ProductID equals b.ProductID 
    where a.Total > b.Price 
    select a.Name; 

result = result.Distinct(); 
+0

Groo,這正是我一直在尋找的。我想LINQ可以是有用的 – JasonTheLucky