linqの結果をListにキャストする

entity-framework linq linq-to-entities

質問

私は私のエンティティをそのタイプのための特定のインタフェースを実装するように拡張しました。次のクエリを実行しようとしています。

 var results = from x in context.MyEntityTable
               where x.AProperty == AValue
               select x;

 return results.Count() > 0 ? results.Cast<IApplicationEntity>().ToList() : null;

ただし、次のようなエラーが表示され続けます。

「LINQ to EntitiesはEntity Data Modelプリミティブ型のキャストのみをサポートします」

基本的に私がしたいのは、生の実体型からそれが実装するインタフェースの一般的なリストに結果を変換することです。

これは可能ですか?

受け入れられた回答

AsEnumerable拡張メソッドを呼び出すことで、エンティティフレームワークのクエリ変換レイヤーを迂回して、クライアントでキャストを実行できます。

return results.Any()
       ? results.AsEnumerable().Cast<IApplicationEntity>().ToList() 
       : null;

ただし、 Countチェックの実行順序を逆にしたほうが良いでしょう。

var list = results.AsEnumerable().Cast<IApplicationEntity>().ToList();
return list.Count == 0 ? null : list;

人気のある回答

結果を複雑な型にキャストする場合は、コードでエンティティへのLINQではなくLINQ to Objectsを使用するように強制する必要があります。

キャストの前にAsEnumerable拡張メソッドを呼び出すことがここでのトリックです。

以下を試してください。

var results = from x in context.MyEntityTable
              where x.AProperty == AValue
              select x;

return results.AsEnumerable().Cast<IApplicationEntity>().ToList();

また、列挙型のCount()をチェックするのは賢明ではないことに注意してください。コレクションが2回繰り返されることを意味するからです。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ