我有以下的(簡化)數據庫表:Linq到與左連接和sum()SQL拋出異常
Products
- ProductID, int, PK
- Name, varchar(50)
Orders
- OrderID, int, PK
- ProductID, int, FK
- Quantity, int, not null
我想閱讀所有產品,如果可用的訂單,總結所有的量該產品的訂單。
的SQL查詢應該是這樣的:現在
select p.ProductID, p.Name, sum(o.Quantity) from Products p
left join Orders o on p.ProductID = o.ProductID
group by p.ProductID, p.Name
,我想在LINQ到SQL查詢翻譯本。 我來這個至今:
var query =
from p in Products
join o in Orders on p.ProductID equals o.ProductID into po
from subOrder in po.DefaultIfEmpty()
group subOrder by new
{
p.ProductID,
p.Name,
}
into productGroup
select new
{
productGroup.Key.ProductID,
productGroup.Key.Name,
Quantity = productGroup.Sum(subOrder => subOrder.Quantity)
};
雖然生成的SQL看起來很好,我得到以下異常:
InvalidOperationException異常:null值不能分配與類型系統 成員.Int32是一個不可爲空的值類型。
有人可以告訴我查詢有什麼問題。任何幫助,將不勝感激!
對於降選民:http://connect.microsoft.com/VisualStudio/feedback/details/368947/linq-to-sql-sum-and-nullable-values。如果沒有任何'subOrder',則總和計算在一個空的結果集上並嘗試將null分配給int。 – Andreas 2012-04-07 09:55:46
謝謝,這個作品!對於沒有訂單的所有產品,它都返回null。雖然生成的SQL並不完全如預期的那樣:'SELECT SUM([t2]。[value])AS [Quantity],[t2]。[ProductID],[t2]。[Name] FROM( SELECT [t1] [Quantity] AS [value],[t0]。[ProductID],[t0]。[Name] FROM [Products] AS [t0] LEFT OUTER JOIN [Orders] AS [t1] ON [t0]。[ ProductID] = [t1]。[ProductID] )AS [t2] GROUP BY [t2]。[ProductID],[t2]。[Name] ' – 2012-04-07 13:51:06
@Andreas您可以使用lambda(基於方法)?沒有左連接方法,只有加入 – Willy 2014-06-20 07:59:45