求和列在C#/ ASP.NET中给出null

时间:2016-12-12 16:36:16

标签: c# asp.net linq

我有以下用于计算列总和的sql语句:

 select coalesce(SUM(cdin_ActMortgageAmnt),0) 
 from CDIndex,company  
 where  comp_companyid=cdin_companyid and comp_idcust like '%10319%' 
 and cdin_Deleted is null and cdin_startunstufdate is not null 
 and cdin_Status='InProgress'

给我这样的输出:

enter image description here

我试图将它转换为LINQ,如下所示:

var sumation = (from com in db.Companies
                join cd in db.CDIndexes on com.Comp_CompanyId equals cd.cdin_CompanyId
                where
                    cd.cdin_Status == "InProgress" &&
                    cd.cdin_startunstufdate == null &&
                    cd.cdin_Deleted == null
                select new {
                    sum = cd.cdin_ActMortgageAmnt 
                }
               );

var summ = sumation.Sum(x => x.sum);

当我在调试模式下将tracePoint放在var summ旁边时,当我指向它时,它会给我null。

有什么问题?

3 个答案:

答案 0 :(得分:2)

在您的情况下,您使用的是coalesce(SUM(cdin_ActMortgageAmnt),0),因为cdin_ActMortgageAmnt的某些值可以为null,并且您提供的默认值为0,您需要在最终查询中执行相同操作。当你选择

时,会出现类似的情况
cd.cdin_ActMortgageAmnt ?? 0

答案 1 :(得分:0)

此查询适合您的SQL查询

     var sumation =db.Companies.Join(db.CDIndexes,
                                        com=>com.Comp_CompanyId,
                                        cd=>cd.cdin_companyid,
                                        (com,cd)=>new {com,cd})
                                   .Where(x=>x.com.comp_idcust.Contains("10319") && x.cd.cdin_Status== "InProgress" &&
                                          cd.cdin_startunstufdate != null &&
                                          cd.cdin_Deleted == null)
                                   .Select(x=>new 
                                   {
                                      sum=x.cd.cdin_ActMortgageAmnt ?? 0
                                   }).ToList()

答案 2 :(得分:0)

这是一种方式:

var summ = db.Companies.Join(
    db.CDIndexes,
    cd => cd.cdin_CompanyId,
    com => Comp_CompanyId,
    (com, cd) => new { com, cd })
  .Where(z=>z.com.comp_idcust.Contains("10319")) // Added "LIKE"
  .Where(z=>z.cd.cdin_Status == "InProgress")
  .Where(z=>z.cd.cdin_startunstufdate != null) // Reversed your condition
  .Where(z=>z.cd.cdin_Deleted == null)
  .Sum(z=>z.cd.cdin_ActMortgageAmnt);

您也可以将所有Wheres组合在一起,但在大多数情况下我不喜欢这样:

var summ = db.Companies.Join(
    db.CDIndexes,
    cd => cd.cdin_CompanyId,
    com => Comp_CompanyId,
    (com, cd) => new { com, cd })
  .Where(z=>z.com.comp_idcust.Contains("10319") // Added "LIKE"
    && z.cd.cdin_Status == "InProgress" 
    && z.cd.cdin_startunstufdate != null // Reversed your condition
    && z.cd.cdin_Deleted == null)
  .Sum(z=>z.cd.cdin_ActMortgageAmnt);