2012-02-26 119 views
1

有沒有人有最明智的想法這個錯誤意味着什麼,以及如何解決它?我的所有研究都是空白的,我可以看到如何在MSDN上設置它,但是它並沒有以一種向我解釋問題是什麼的方式來解釋它。如果我刪除了一些LINQ查詢來設置viewbag項目,那麼它似乎可以解決它,但是當我設置新的並將它們傳遞到我的視圖中以生成MVCMailer的郵件時,它會回來。不知道它是一個viewbag問題還是僅僅是我調用了太多的linq查詢來生成它們傳遞給視圖。DbLimitExpression需要收集參數

我非常卡住(再次)..........

乾杯, 史蒂夫。

DbLimitExpression需要一個集合參數。 參數名稱:參數 描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.ArgumentException:DbLimitExpression需要集合參數。 參數名稱:參數

的代碼的一個例子是:

  var VBSalutation = from A in context.Salutations 
       where A.SalutationId == policytransaction.SalutationId 
       select A.SalutationName; 
     ViewBag.Salutation = VBSalutation.FirstOrDefault(); 

這是重複的各種參數,然後傳遞到視圖中。

+0

哪個數據庫引擎? – 2012-02-26 16:39:49

+0

Sql Server Compact 4.如果你認爲這是與DBEngine相關的,我可以設置一個Azure DB並查看是否可以重複它?我認爲這是代碼相關的,所以沒有嘗試過。 – 2012-02-26 16:44:09

+0

它可能是,因爲有一些驅動程序問題在一個點上,所以最好確保它不是與mysql相關的。這個代碼是第一還是edmx? – 2012-02-26 17:23:41

回答

2

嗯,我遇到了類似的問題,並解決它。問題出在WHERE子句中:左側等號運算符(=)的數據類型符號與右側的數據類型不匹配。因此,在您的情況:

where A.SalutationId == policytransaction.SalutationId

A的SalutationID可能是policytransaction可能是一個字符串的INT和SalutationId(這是怎麼在我的情況)。

我解決它通過分配policytransaction.SalutationId爲int變量,並使用它:

int myIntVariable = Convert.ToInt16(policytransaction.SalutationId); 
...//some code here 
where A.SalutationId == myIntVariable; 

也請注意,你不能直接澆鑄直接Linq中的變量否則你會得到一個錯誤「LINQ到實體不識別該方法「。你將不得不使用一個臨時變量,然後應用where子句。

+0

感謝DonNetFreak,我結束了重新編碼,因爲我認爲這是我對數據庫的調用次數,因此無法輕易測試。這聽起來很明智,並會幫助其他人,因爲我在網上找不到任何東西。所以標記爲解決方案。 – 2012-06-10 19:43:30

0

嘗試ViewBag.Salutation = VBSalutation.SingleOrDefault();