0

这是我现在遇到的错误:

The argument types 'Edm.String' and 'Edm.Decimal' are incompatible for this operation. Near equals expression, line 1, column 156.

我知道这个错误是一个兼容性问题,但是在查看表格并看到参数匹配并且我认为声明正确之后,我需要知道这个引用的代码行。我唯一要质疑的是表中声明为货币的数据,但我将它们声明为十进制。这是爆炸的代码

        public ActionResult Details(int PVID = 0, int PMID = 0, decimal AID = 0.00M, decimal TID =0.00M, string TyID = null, string NID = null, decimal AmID = 0.00M, decimal PID = 0.00M, string TNID = null, string INID = null, DateTime? DEID = null, decimal IBID = 0.00M, decimal PBID = 0.00M, DateTime? LMDID = null)
    {
        tblDenialReport tbldenialreport = db.tblDenialReport.Find(PVID, PMID, AID, TID, TyID, NID, AmID, PID, TNID, INID, DEID, IBID, PBID, LMDID);
        if (tbldenialreport == null)
        {
            return HttpNotFound();

        }
        return View(tbldenialreport);
    }

感谢您的帮助

4

2 回答 2

1

您应该将主键或复合键作为参数传递给DbSet<TEntity>.Find Method. 您在这里做错了:

tblDenialReport tbldenialreport = db.tblDenialReport.Find(PVID, PMID, AID, TID, TyID, NID, AmID, PID, TNID, INID, DEID, IBID, PBID, LMDID);
  • DbSet<TEntity>.Find Method使用主键值尝试查找上下文跟踪的实体。
  • 如果实体不在上下文中,则将执行查询并针对数据源中的数据进行评估,如果在上下文或数据源中未找到实体,则返回 null。
  • 请注意, Find 还会返回已添加到上下文但尚未保存到数据库的实体。

如果您想使用上述参数搜索 tblDenialReport,那么您可以执行以下操作:

public ActionResult Details(int PVID = 0, int PMID = 0, decimal AID = 0.00M, decimal TID =0.00M, string TyID = null, string NID = null, decimal AmID = 0.00M, decimal PID = 0.00M, string TNID = null, string INID = null, DateTime? DEID = null, decimal IBID = 0.00M, decimal PBID = 0.00M, DateTime? LMDID = null)
    {
        tblDenialReport tbldenialreport = db.tblDenialReport.SingleOrDefault(r=>

             r.PVID == PVID &&  r.PMID == PMID && r.AID == AID &&
             r.TID ==TID && r.TyID == TyID && r.NID == NID && r.AmID == AmID && 
             r.PID == PID && r.TNID == TNID && r.INID == INID && r.DEID == DEID &&
             r.IBID == IBID && r.PBID == PBID && r.LMDID == LMDID);

        if (tbldenialreport == null)
        {
            return HttpNotFound();

        }
        return View(tbldenialreport);
    }

但是,我强烈建议您只在函数名中传递 tblDenialReport 的唯一键,然后按如下方式执行:

public ActionResult Details(int tblDenailReportId)
    {
        tblDenialReport tbldenialreport = db.tblDenialReport.Find(tblDenailReportId);

        if (tbldenialreport == null)
        {
            return HttpNotFound();

        }
        return View(tbldenialreport);
    }
于 2013-06-18T14:42:36.327 回答
-1

根据错误消息,我猜该错误是由于db.tblDenialReport.Find(...)需要一个整数,但您也传递了字符串和小数。

于 2013-06-18T14:42:17.253 回答