我正在尝试进行模块化 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”类型。
我知道这是我的 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>'