2013-06-18 30 views
0

小數這是我現在得到的錯誤:聲明在MVC 4個控制器參數

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); 
    } 

感謝您對基於該錯誤消息,我猜出錯的幫助

+0

模型的所有這些關鍵值? –

+0

是的,它實際上是一個加入了多個表的存儲過程。然後我使用了結果集並創建了一個表來使用 – MaximusPrime

+0

10如果在sql server中將小數值聲明爲「money」,它會很重要嗎? – MaximusPrime

回答

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); 
    } 
+0

您能否提供一個使用此方法的代碼段? MS站點上的示例太含糊 – MaximusPrime

+0

@MaximusPrime您想要查找包含所有這些值的tblDenialReport嗎? –

+0

這是正確的先生 – MaximusPrime

-1

是由於db.tblDenialReport.Find(...)預計一個整數的事實,但你傳遞字符串和小數點以及。

+0

它預計'params []' –

+0

啊,好吧......這是一個猜測。 – Ohlin

+0

在這裏檢查http://msdn.microsoft.com/en-us/library/gg696418%28v=vs.103%29.aspx –