簡體   English   中英

linq選擇字段類型未知

[英]linq select field type unknown

我有以下代碼:

var query =
        from product in products.AsEnumerable()
        where product.Field<string>("Product") == "Phone"
        select new
        {
            Name = product.Field<string>("Name"),
            ProductNumber = product.Field<string>("ProductNumber"),
            ListPrice = product.Field<Decimal>("Price")
        };

但是我收到以下錯誤:

無法將類型為“ System.Int32”的對象轉換為類型為“ System.String”的對象。

我認為這是因為在ProductNumber列中我並不總是擁有字符串,並且在第一行中ProductNumber實際上是一個int 我嘗試過將它們轉換並轉換為字符串,但是沒有用。

我怎樣才能解決這個問題?

Field<T>的文檔中:

InvalidCastException [在以下情況時引發]基礎列的值類型無法轉換為通用參數T指定的類型。

在您的情況下,列類型似乎是可為空的整數,因此您需要執行以下操作:

var query =
    from product in products.AsEnumerable()
    where product.Field<string>("Product") == "Phone"
    select new
    {
        Name = product.Field<string>("Name"),
        // Below, I am using ""+... idiom for a null-safe ToString
        ProductNumber = ""+product.Field<int?>("ProductNumber"),
        ListPrice = product.Field<Decimal>("Price")
    };

想法是將值作為int檢索,但接受缺少數據的數據行。

如果你不介意ProductNumber您的匿名類是可空的int !而非string S,取出""+表達式的一部分。

首先,使用ProductNumber作為字符串獲取可枚舉的記錄,然后在Enumerable上進行從字符串到整數的轉換。

暫無
暫無

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

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