使っていると共通的なインターフェースをもつエンティティに同じような処理を適用したいことがあります。そんなときはインターフェースを定義して、エンティティクラスにそのインターフェースを実装し、拡張メソッドで共通機能を実装するのがスマートかと思います。しようとすると問題が起こります。今回はそれを回避して、インターフェースの拡張メソッドでクエリーを作成できるようにする方法を紹介します。制限エンティティクラスとインターフェースはそれぞれ下記のようになっているとします。インターフェースに対し、下記のような拡張メソッドを定義しているとします。ような単純に値を設定するだけのメソッドの場合、なんの問題ありません。実装したクラスのクエリーを扱う場合に問題が生じます。プリミティブ型または列挙型のキャストのみがサポートされます。いう変数式に対し、キャスト操作が挿入されてしまうからです。いったオブジェクト間のキャストはできないのでエラーになる、ということです。キャスト操作なんて入れていただかなくてもいいのですが、勝手に入ってしまう仕様なのだから致し方ありません。戻して~なんてして試行錯誤しましたが、やはりだめでした。キャストを取り除くということで、この解決策を提案してくださっているのが下記の質問のベストアンサーです。Entitieshttps://stackoverflow.com/questions/34647190/cast-a-iqueryable-type-to-interface-in-linq-to-entities自動で挿入されるものは仕方ないと割り切って、式木中の挿入されたキャスト式を削除してやろうというのです。少々トリッキーというか泥臭い印象もありますが、拡張メソッドで覆い隠してしまうので、実現できればなんでもかまいません。拡張した下記のようなクラスを作成します。メソッド部分だけです。残る、ということですね。先程の拡張メソッドに適用すると下記のようになります。してでなく、元の型のまま条件クエリーが追加されるはずです。LINQSNSでもご購読できます。