3
(C#을 LINQ) 이것을 하나로, OData는 모든 직원로드 요청을 GET입니다 : 내가 가진수정 MethodCallExpression 인수가 GET 요청</p> <p>에 대한 실행되기 전에 나는 <code>MethodCallExpression</code> 인수를 추가 할 필요가
server/employees?$filter=birthday+ge+datetime'1985-01-01'
을
// My class inherits from IQToolkit which is building an expression based on the request
public class MyQueryProvider : QueryProvider
{
// Is defined in advance (after a client established a connection)
private int clientDepartmentNo;
// This is the central function, which gets a MethodCallExpression from the toolkit
// and executes it
public override object Execute(MethodCallExpression expression)
{
// The current content of expression (see my OData URL above):
// "value(NHibernate.Linq.NhQueryable`1[Models.Employee]).Where(it => (it.Birthday >= Convert(01.01.1985 00:00:00)))"
// Now I would like to extend the expression like that:
// "value(NHibernate.Linq.NhQueryable`1[Models.Employee]).Where(it => (it.Birthday >= Convert(01.01.1985 00:00:00)) && it.DepartmentNo == clientDepartmentNo)"
// That works fine
var additionalExpressionArgument = (Expression<Func<Employee, bool>>)(x => x.DepartmentNo == clientDepartmentNo);
// But that is still not possible, because the property .Arguments is readonly...
expression.Arguments.Add(additionalExpressionArgument);
// Can you give me an advice for a working solution?
// Would like to execute the query based on the URL and extension
return nHibernateQueryProvider.Execute(expression);
}
}
나는 위의 expression.Arguments.Add
대신에 무엇을해야합니까 : 다음 코드를 시도?
public override object Execute(MethodCallExpression expression)
{
var query = (Query<Employee>)(CreateQuery<Employee>(expression)
.Where(x => x.DepartmentNo == clientDepartmentNo));
return nHibernateQueryProvider.Execute(query.Expression);
}
을하지만 할 아마 더 좋은 방법이 있습니다