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