Мне нужно написать фильтрующее лямбда-выражение, используемое в LinqToSQL, для которого требуется больше, чем количество параметров, предоставляемых стандартным System.Func (в этом случае максимальное число - 16).
Expression<Func<BusinessDTO,
string,
int,
int,
int,
DateTime,
DateTime,
DateTime,
DateTime,
DateTime,
DateTime,
DateTime,
DateTime,
int,
int,
int,
int,//-> Max number exceeded
bool>> fnFilter = (business,
Name,
Redeemed,
Permanent,
ApprovedByUser,
BeginApprovalDate,
EndApprovalDate,
BeginExpiryDate,
EndExpiryDate,
BeginEntryDate,
EndEntryDate,
BeginChangeDate,
EndChangeDate,
WorkFlowCode,
CreatedByUser,
UpdatedByUser) => ...
Как я могу добиться этого?
Вот использование:
filterExpression = Expression.Invoke(fnFilter, businessParam,
Expression.Constant(name),
Expression.Constant(redeemed),
Expression.Constant(permanent),
Expression.Constant(approvedByUser),
Expression.Constant(filter.BeginApprovalDate),
Expression.Constant(filter.EndApprovalDate),
Expression.Constant(filter.BeginExpiryDate),
Expression.Constant(filter.EndExpiryDate),
Expression.Constant(filter.BeginEntryDate),
Expression.Constant(filter.EndEntryDate),
Expression.Constant(filter.BeginChangeDate),
Expression.Constant(filter.EndChangeDate),
Expression.Constant(workflowCode),
Expression.Constant(createdByUser),
Expression.Constant(updatedByUser));
var resultExpression = Expression.Equal(filterExpression, Expression.Constant(true));
var predicate = Expression.Lambda<Func<BusinessDTO, bool>>(resultExpression, businessParam);
repository.FindAll(predicate);