實體框架 - Linq - 無法創建類型為“System.Object”的常量值。只有原始類型

entity-framework expression-trees linq

我有一個方法為給定的類型,屬性和值的linq查詢構建表達式。只要類型上的屬性不可為空,這就可以很好地工作。這是我工作的例子( http://www.marcuswhitworth.com/2009/12/dynamic-linq-with-expression-trees )我在屬性上調用Equals方法。但是我發現Nullable類型的Equals方法將Object作為參數而不是Nullable類型。我嘗試使用GetValueOrDefault來隱藏空值,但EF不支持該方法。作為一個簡單示例,以下代碼將引發錯誤:

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

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

熱門答案

如果你說== ,你生成一個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。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因