错误c#System.NullReferenceException

时间:2013-08-28 08:47:10

标签: c# mysql sql web-services nhibernate

我有代码:

 public OrderTotalModel getOrderTotalModelByAgentID(string AgentIDS = null, DateTime? fromDate = null, DateTime? toDate = null)
    {
        var session = SessionManager.CurrentSession;
        TruncateAmount truncateAmount = new TruncateAmount();
        string sql = @" SELECT sum(o.totalQuantity) TotalQuantity,sum(o.totalAmount) TotalAmount
                        FROM Orders o join workflows w on w.Step = o.Status 
                        inner join Agents a on a.ID = o.AgentID                            
                        where w.Step = o.Status   
                        and w.External = true and w.inactive = false
                        and o.AgentId in (:agentIDS) and o.approved = true";
        //Tu ngay
        if (fromDate.HasValue)
        {
            sql += " and Date(o.Created) >= Date(:fromDate)";
        }
        // Den ngay
        if (toDate.HasValue)
        {
            sql += " and Date(o.Created) <= Date(:toDate)";
        }
        var sqlQuery = session.CreateSQLQuery(sql)
              .AddScalar("TotalQuantity", NHibernateUtil.Double)
              .AddScalar("TotalAmount", NHibernateUtil.Double);
        sqlQuery.SetString("agentIDS", AgentIDS);
        if (fromDate.HasValue)
        {
            sqlQuery.SetDateTime("fromDate", (DateTime)fromDate);
        }
        if (toDate.HasValue)
        {
            sqlQuery.SetDateTime("toDate", (DateTime)toDate);
        }
        var result = sqlQuery.List<object[]>().Select(row => new OrderTotalModel()
        {
            TotalQuantity = (double)row[0],
            TotalAmount = truncateAmount.truncateAmt((double)row[1]),
        }).FirstOrDefault();
        return result;
    }
     

当我输入fromDate#toDate时它返回true但是当我输入fromDate == toDate时出现错误“System.NullReferenceException”。我不知道有什么问题,请帮帮我。

1 个答案:

答案 0 :(得分:0)

我想如果fromDate == toDate你的sql函数没有返回任何值。因此,您无法拨打NULL.FirstOrDefault()

 var result = sqlQuery.List<object[]>().Select(row => new OrderTotalModel()
    {
        TotalQuantity = (double)row[0],
        TotalAmount = truncateAmount.truncateAmt((double)row[1]),
    }).FirstOrDefault();