2016-02-06 26 views
0

我的模型具有可爲空的十進制類型。所以在我的表達式樹它給了我下面的錯誤:在表達式樹中轉換爲可爲空的十進制

The binary operator Equal is not defined for the types 'System.Nullable`1[System.Decimal]' and 'System.Decimal'

現在我想將字符串轉換爲十進制數?爲此事我曾嘗試爲:

decimal? res = Convert.ToDecimal(mystr); // this gives me type as System.Decimal 

我也看了的thisthisthisthis答案。它們都將它轉換爲System.Decimal類型,而我的表達式樹則給出了上述錯誤。

我真的需要將它們轉換爲System.Nullable(System.Decimal)來爲我工作。

我該如何解決?我的模型是從Entity Framework EDMX生成的,所以我不能改變它們的類型。我必須在代碼中進行轉換。

+1

您已經轉換它。 'res'是一個可以爲空的小數。 – romanoza

+0

它不是..當我檢查作爲var d = res.GetType();它給了我System.Decimal。和Expression樹也給出了相同的錯誤 –

+1

@AwaisMahmood:不,res的類型是'decimal?'。但是,當你調用'GetType()'時,它會把'decimal'裝箱......這就是裝箱可以使用可爲空值的類型的方式。表達式樹問題是非常不同的。 –

回答

2

你所示轉換爲decimal?,使用隱式轉換從TT?任何非空值類型T正常C#代碼示例。

在表達式樹中,您只需使用Expression.Convert即可執行該轉換,例如,

// Assuming beforeConversion is an expression tree with a type of 
// decimal 
var converted = Expression.Convert(beforeConversion, typeof(decimal?)); 
+0

非常感謝..它的工作! –

相關問題