![](/img/trans.png)
[英]LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method, and this method cannot be translated into a store expression
[英]LINQ to Entities does not recognize the method 'Int32 ToInt32(System.String)' method
我在網上檢查了一些答案,並且我知道我無法將ToInt32轉換為T-SQL,因此我需要先在內存中運行查詢,然后再進行轉換,但是我不知道如何在我的應用它例。 我有下面的查詢,它顯示了標題中寫的錯誤消息:
string[] parts = rvm.ZipCode.Split('-');
var list = results.OrderBy(b =>
Math.Abs(Convert.ToInt32(parts[0]) - Convert.ToInt32(b.Zip))).Take(5).ToList();
results
是我之前應用的另一個查詢。 知道如何解決嗎?
調用AsEnumerable()
將強制其在內存中進行排序:
var list = results.AsEnumerable().OrderBy(b => Math.Abs(Convert.ToInt32(parts[0]) - Convert.ToInt32(b.Zip))).Take(5).ToList();
盡管Take(5)
將在從數據庫中檢索到數據之后發生,所以這可能是非常無效的,因此您要將整個結果集提取到內存中,對其進行排序,然后丟棄除前5條記錄以外的所有記錄。
您可以嘗試這樣的事情:
// It would be better, if we make the conversion only once instead of
// doing this each time we fetch an item from our collection.
int value = Convert.ToInt32(parts[0]);
var list = results.AsEnumerable()
.OrderBy(z => Math.Abs(value - Convert.ToInt32(z.Zip)))
.Take(5)
.ToList();
Linq2SQL和Linq2Entity始終嘗試將查詢傳遞給數據庫,並且大多數數據庫的功能與convert類的功能不同。 這意味着要應用轉換功能,您需要指示linq從數據庫中檢索數據,以便它可以運行代碼,而不僅僅是將其傳遞給數據庫。
這是通過在調用convert函數之前調用AsEnumerable()或ToList()實例化查詢來完成的
另一個選擇是將其更改為更簡單的轉換,例如(int)或int? 因為這些確實具有直接的數據庫映射
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.