簡體   English   中英

LINQ ToDictionary System.InvalidCastException:'無法將類型為'System.Int32'的對象強制轉換為類型為'System.String'。

[英]LINQ ToDictionary System.InvalidCastException: 'Unable to cast object of type 'System.Int32' to type 'System.String'.'

在這里開玩笑,但有一個LINQ查詢,我想將其轉換為Dictionary對象,但是卻收到“ System.InvalidCastException:'無法將類型為'System.Int32'的對象轉換為類型為'System.String'的'。”錯誤這樣做時,我很沮喪。 僅當我只想使用Key並將Product類用作值時,才會發生這種情況。

ProductsDataContext context = new ProductsDataContext();

Dictionary<int, Product> result = context.Products.Where(x => x.ProductName.StartsWith("N")).ToDictionary(x => x.Prod_ID); 

Prod_ID是類和數據庫中的整數。 無處不應將其轉換為字符串,因此我對此錯誤消息感到困惑。

如果我這樣寫:

Dictionary<int, string> result = context.Products.Where(x => x.ProductName.StartsWith("N")).ToDictionary(x => x.Prod_ID, x=> x.ProductName)

它工作正常,並且沒有數據轉換錯誤消息(密鑰是指定的整數)。 我以前沒有使用過這種方法(帶有LINQ to SQL),所以我認為有些東西丟失了。 (它適用於非SQL東西)

在不同的表上嘗試了相同的代碼,並獲得了結果(沒有錯誤)。 看起來問題出在Product表中為空(varchar()為空-因此錯誤消息已完全關閉-可能是錯誤嗎?)

    StylesDataContext context = new StylesDataContext();

    Dictionary<int,Style> results = context.Styles.Select(x => x).Where(x => x.style_name.EndsWith("d")).ToDictionary(x => x.style_id);
    foreach (KeyValuePair<int, Style> r in results)
    {
        Console.WriteLine("id: " + r.Key.ToString()  + "\tName: " + r.Value.style_name + "\tGUID: " + r.Value.style_bvin  );
    }

嘗試以下代碼:

ProductsDataContext context = new ProductsDataContext();
var r1 = context.Products.Where(x => x.ProductName.StartsWith("N"));
var r2 = r1.ToDictionary(x => x.Prod_ID);

是否為r1或r2發生錯誤? 如果使用VS,請保留變量名,以查看每個var語句使用的類型。 產品的Enumerable似乎正在產生錯誤。

這個特定問題的答案是,Visual Studio 2017某種程度上破壞了LINQ-to-SQL類的一部分自動生成的代碼(我至今未做任何更改)。 刪除這些類和添加他們回來就解決了這個查詢的錯誤消息的問題。

我的推測是數據已損壞或表中存在null導致問題,這是不正確的。

我進行了硬盤掃描,以查看數據是否通過我的PC損壞,但恢復干凈了。

如果再次發生這種情況,我將確保進行逐個文件的完整比較,以查看實際損壞的部分並將其發布到此處,並發送給MS Dev團隊。 如果這是一個錯誤,這是一個可怕的,浪費時間的,一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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