簡體   English   中英

Linq查詢“特定的轉換無效”

[英]Linq query “specific cast is not valid”

跟着Linq到數據表查詢給我錯誤特定的轉換無效

decimal[] temp = dt.AsEnumerable()
    .Select(r => new
       {
           totLen = r.Field<decimal>("Quantity") 
                     * (r.Field<decimal>("Breath") 
                         * r.Field<decimal>("Length"))
       })
    .Cast<decimal>()
    .ToArray();

有人可以建議我為什么嗎?

您應該能夠直接從Select()返回decimal

decimal[] temp = dt.AsEnumerable().Select(
    r => r.Field<decimal>("Quantity") * (r.Field<decimal>("Breath") * r.Field<decimal>("Length")
)).ToArray();

您無需創建匿名類型:

decimal[] temp = dt.AsEnumerable()
    .Select(r => r.Field<int>("Quantity") 
               * r.Field<decimal>("Breath") 
               * r.Field<decimal>("Length"))
    .ToArray();

您正在嘗試將匿名類型轉換為十進制,這當然是行不通的。 不創建匿名類型-只需選擇十進制值即可:

decimal[] temp = (from r in dt.AsEnumerable()
                  select r.Field<decimal>("Quantity") * 
                         r.Field<decimal>("Breath") * 
                         r.Field<decimal>("Length")).ToArray();

與Linq方法語法相同:

decimal[] temp = dt.AsEnumerable()
                   .Select(r => r.Field<decimal>("Quantity") * 
                                r.Field<decimal>("Breath") * 
                                r.Field<decimal>("Length"))
                   .ToArray();

如何使您的代碼正常工作? 使用Select而不是Cast

.Select(x => x.totLen).ToArray();

但是同樣,您不需要匿名類型來選擇單個值。

您的投影( Select )將創建匿名類型的實例,如下所示:

class SomeAnonymousClass
{
   public totLen { get; set; }
}

...哪些實例不能轉換為十進制。

暫無
暫無

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

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