2010-12-08 79 views
1

我有一個方法來爲給定的類型,屬性和值建立一個linq查詢的表達式。只要該類型的屬性不可爲空,此功能就非常有用。這裏是我工作的例子(http://www.marcuswhitworth.com/2009/12/dynamic-linq-with-expression-trees)我正在調用屬性上的Equals方法。不過,我發現Nullable類型的Equals方法將Object作爲參數而不是Nullable類型。我試圖使用GetValueOrDefault隱藏空值,但EF不支持該方法。舉一個簡單的例子下面的代碼會拋出一個錯誤:如果您使用的==代替的Equals實體框架 - Linq - 無法創建類型爲「System.Object」的常量值。只有原始類型

decimal? testVal = new decimal?(2100); 
     var test = (from i in context.Leases where i.AnnualRental.Equals(testVal) select i).ToList(); 

但是()方法,將工作確定。我不知道如何將代碼轉換爲使用==而不是Equals()。任何建議將不勝感激。

+2

爲什麼在這種情況下`==`不起作用? – cdhowie 2010-12-08 17:48:57

回答

3

如果您說==,您生成一個BinaryExpression與NodeType爲ExpressionType.Equalhttp://msdn.microsoft.com/en-us/library/bb361179.aspx

如果您說.Equals(x),您將生成一個MethodCallExpression。 LinqToEntities可能轉換爲Sql的MethodCallExpression是一個限制列表(例如,您自己的未裝飾方法都不在該列表中)。 Nullable<T>.Equals(x)顯然不在該列表中。

不要說.Equals(x) LinqToEntities。

相關問題