我是LINQ的新手,我刚刚开始理解它的语法,但仍决定使用Linqer应用程序将我的SQL语句转换为LINQ语句。但是,LINQ查询不会产生相同的结果。
这是我的SQL查询:
SELECT ISNULL(SUM(linehaul + accessorial), 0) FROM costs
WHERE
ordnumber = 19374911
它转换为此LINQ:
From Costs In
(From Costs In db.Costs
Where
CLng(Costs.ordnumber) = 19374911
Select
Column1 = CType((Costs.linehaul + Costs.accessorial),Decimal?),
ordnumber = Costs.ordnumber,
linehaul = Costs.linehaul,
accessorial = Costs.accessorial,
Dummy = "x"
)
Group Costs By Costs.Dummy Into g = Group
Select New With {
.Column1 = If(CType(g.Sum(Function(p) p.linehaul + p.accessorial),Decimal?) Is Nothing,0,g.Sum(Function(p) p.linehaul + p.accessorial))
}
我不能说我100%理解这种转换,但这不是重点。如果我有给定ordnumber的成本,那么结果是一致的但是如果找不到给定ordnumber的成本,LINQ返回一个空结果集而不是像我的SQL一样返回默认值“0”。
我需要向LINQ添加什么才能使其返回零而不是空结果?
答案 0 :(得分:1)
你应该可以做这样的事情(应该适用于EF和L2SQL):
int cost = Context.Costs.Where(x => x.ordnumber == 19374911)
.Sum(y => y.linehaul + y.accessorial)) ?? 0;
VB.net应该是这样的:(未经测试)
Dim cost As Integer = If(Context.Costs.Where(Function(cost) cost.ordnumber = 19374911).Sum(Function(x) x.linehaul + y.accessorial)), 0)