2010-12-08 18 views
1

私は、与えられた型、プロパティ、および値のlinqクエリ用の式を構築する方法を持っています。この型のプロパティがnullableでない限り、これは素晴らしく機能します。ここでは私が(http://www.marcuswhitworth.com/2009/12/dynamic-linq-with-expression-trees)から働いている例です。私はプロパティでEqualsメソッドを呼び出しています。しかし、私は、Nullable型のEqualsメソッドがNullable型の代わりにObjectとしてパラメータを取ることを発見しました。 GetValueOrDefaultを使用してnull値を非表示にしようとしましたが、EFはそのメソッドをサポートしていません。簡単な例として、次のコードは、エラーがスローされます:あなたは==ではなく対等()メソッドを使用している場合Entity Framework - Linq - 'System.Object'型の定数値を作成できません。プリミティブ型のみ

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

しかし、それはOKに動作します。私はどのようにコード==を使用する代わりにEquals()の代わりに変換するか分からない。どんな提案も高く評価されます。

+2

このシナリオで '=='が動作しないのはなぜですか? – cdhowie

+3

私はcdhowieと同じ質問をするつもりです、なぜ==かなり多くは同じことをしますか? var test = context.Leases.Where(l => l.AnnualRental == testVal).ToList();うまくいくはずですか? – Joakim

答えて

3

==と言う場合、ノードタイプがExpressionType.EqualBinaryExpressionを生成します。 http://msdn.microsoft.com/en-us/library/bb361179.aspx

.Equals(x)と言う場合、MethodCallExpressionが生成されます。 LinqToEntitiesがSqlに変換する可能性のあるMethodCallExpressionは、制限されたリストです(たとえば、あなたのデコレートされていないメソッドはそのリストにありません)。 Nullable<T>.Equals(x)は明らかにそのリストには載っていません。

LinqToEntitiesに.Equals(x)と言ってはいけません。

関連する問題