(OData 원본에 대한) 모듈 식 Linq 쿼리를 만들려고합니다.Any 절에서 Linq 식을 분리하는 방법
이 내 쿼리의 단순화 된 버전입니다 :
// 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();
이 모두 잘 컴파일,하지만 난 그것을 실행할 때 내 모든 조항이 예외가 발생합니다
'형식의 개체를 캐스팅 할 수 없습니다를 System.Linq.Expressions.ConstantExpression '을 입력하여'System.Linq.Expressions.LambdaExpression '을 입력하십시오.
나는이 절이 내 절이라는 것을 알고 있습니다. 절에 절을 포함하면 모든 것이 잘 작동하기 때문입니다.
왜이 오류가 발생합니까? 그리고 어떻게이 진술을 깨고 에러를 내지 않을 수 있습니까?
업데이트 : 익스프레션
를 사용하여 나는 이런 식 사용하려고 :
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>'
을
나는 그것을 시도하고 컴파일 시간 오류를 제공합니다. (오류 메시지로 내 질문을 업데이트했습니다.) – Vaccano
Orders 속성은 IEnumerable입니까? 나는 그것이 있다고 추측하고있다. Enumerable.Any 확장 메서드의 서명은 Expression>을 사용하지 않으므로 사용할 수 없습니다.대신 Expression.Lamba, Expression.Call 등을 사용하여 표현식을 만들어야합니다.이 표현식은 모든 확장 메소드가 어쨌든 수행합니다. 또는 누군가가 다음과 같이 제안하는 주문 유형 IQeryable 을 만들 수 있습니다. –