【问题标题】:The cast to value type 'System.Int32' failed because the materialized value is null转换为值类型“System.Int32”失败,因为具体化值为 null
【发布时间】:2015-07-20 14:10:55
【问题描述】:

这是我的家庭控制器:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Biblioteca.Models;
using CrystalDecisions.CrystalReports.Engine;

namespace Biblioteca.Controllers
{
    public class HomeController : Controller
    {
        private BibliotecaDatabase db = new BibliotecaDatabase();

        public ActionResult Index()
        {
            var totalesviewmodel = new TotalesViewModel();
            totalesviewmodel.MontoCopias = db.AlumnosList.Sum(o => o.Copias);
            totalesviewmodel.MontoImpresiones = db.AlumnosList.Sum(o => o.Impresiones);
            totalesviewmodel.DineroDeposito = db.AlumnosList.Sum(o => o.Deposito);
            totalesviewmodel.DineroSap = db.AlumnosList.Sum(o => o.Sap);
    // *** here is my issue ***
            totalesviewmodel.MontoCopiasMaestro = db.MaestrosList.Sum(o => o.Copias);
            totalesviewmodel.MontoImpresionesMaestro = db.MaestrosList.Sum(o => o.Impresiones);
            return View(totalesviewmodel);
        }

        public ActionResult Reports()
        {
            List<Alumno> allDatos = new List<Alumno>();
            using (BibliotecaEntities dc = new BibliotecaEntities())
            {
                allDatos = dc.Alumnos.ToList();
            }
            return View(allDatos);
        }

        public ActionResult ExportReport()
        {
            List<Alumno> allDatos = new List<Alumno>();
            using (BibliotecaEntities dc = new BibliotecaEntities())
            {
                allDatos = dc.Alumnos.ToList();

                ReportDocument rd = new ReportDocument();
                rd.Load(Path.Combine(Server.MapPath("~/Reports"), "rpt_datos.rpt"));
                rd.SetDataSource(allDatos);

                Response.Buffer = false;
                Response.ClearContent();
                Response.ClearHeaders();

                try
                {
                    Stream stream = rd.ExportToStream(CrystalDecisions.Shared.ExportFormatType.PortableDocFormat);
                    stream.Seek(0, SeekOrigin.Begin);
                    return File(stream, "application/pdf", "Reporte.pdf");
                }
                catch (Exception ex)
                {
                    throw;
                }
            }
        }

        public ActionResult Contact ()
        {
            ViewBag.Message = "Your contact page.";
            return View();
        }
    }
}

在这一行:

totalesviewmodel.MontoCopiasMaestro = db.MaestrosList.Sum(o => o.Copias);

我得到这个错误:

转换为值类型“System.Int32”失败,因为具体化值为 null

在安装水晶报表之前我没有这个问题。

我做错了什么?

【问题讨论】:

  • totalesviewmodel.MontoCopias 的类型是什么?它应该是一个可以为空的类型,比如int?
  • 是的,我有大师名单
  • yap 我的字段是 int 吗?
  • db.MaestrosList.Sum(o =&gt; o.Copias )中,o.Copias的类型是什么?

标签: c# asp.net-mvc entity-framework crystal-reports


【解决方案1】:

我解决了,当你在数据库上没有任何注册时会发生错误,所以你需要插入一个才能工作:D

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-24
    • 2013-06-18
    相关资源
    最近更新 更多