簡體   English   中英

LINQ to Entities無法識別方法'Int32 ToInt32(System.String)'方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM