Linqer SQL到LINQ转换 - 结果不同

时间:2013-11-26 15:17:24

标签: sql vb.net linq linq-to-sql linq-expressions

我是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添加什么才能使其返回零而不是空结果?

1 个答案:

答案 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)