我有以下的(简化)数据库表: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