モジュール式の Linq クエリを (OData ソースに対して) 作成しようとしています。
これは私のクエリの簡略化されたバージョンです:
// Any clause that I want to be modular
Func<Encounter, bool> orderAnyClause = x => x.OrderName.StartsWith("Order 00");
// Query using the any clause
var result = entities.Customers.Where(cust=> cust.Orders.Any(orderAnyClause));
// A method to do the selection. It works just fine.
IQueryable<SearchSelectionResult> selectedResults = SelectResults(result);
// This throws the exception shown below
var list = selectedResults.ToList();
これはすべて正常にコンパイルされますが、実行すると any 句で次の例外が発生します。
タイプ 'System.Linq.Expressions.ConstantExpression' のオブジェクトをタイプ 'System.Linq.Expressions.LambdaExpression' にキャストできません。
ステートメントにthe句を埋め込むと、すべて正常に機能するため、それがany句であることはわかっています。
このエラーが発生するのはなぜですか? そして、どうすればこのステートメントを壊してエラーを出さないようにできますか?
更新: 式の使用
次のような表現を使ってみました。
Expression<Func<Encounter, bool>> orderAnyClause =
x => x.OrderName.StartsWith("Order 00");
そして、次のコンパイル時エラー メッセージが表示されます。
Instance argument: cannot convert from System.Data.Services.Client.DataServiceCollection<ODataComponetizedQueriesTest.MyEntities.Order>' to 'System.Linq.IQueryable<ODataComponetizedQueriesTest.MyEntities.Order>'