public virtual Expression BuildDeleteExpression(Type type, IEnumerable<DataAccessObject> dataAccessObjects)
{
var typeDescriptor = this.DataAccessModel.GetTypeDescriptor(type);
var parameter = Expression.Parameter(typeDescriptor.Type, "value");
Expression body = null;
foreach (var dataAccessObject in dataAccessObjects)
{
var currentExpression = Expression.Equal(parameter, Expression.Constant(dataAccessObject));
if (body == null)
{
body = currentExpression;
}
else
{
body = Expression.OrElse(body, currentExpression);
}
}
if (body == null)
{
return null;
}
var condition = Expression.Lambda(body, parameter);
var expression = (Expression)Expression.Call(Expression.Constant(this.DataAccessModel), MethodInfoFastRef.DataAccessModelGetDataAccessObjectsMethod.MakeGenericMethod(typeDescriptor.Type));
expression = Expression.Call(MethodInfoFastRef.QueryableWhereMethod.MakeGenericMethod(typeDescriptor.Type), expression, Expression.Quote(condition));
expression = Expression.Call(MethodInfoFastRef.QueryableExtensionsDeleteMethod.MakeGenericMethod(typeDescriptor.Type), expression);
return expression;
}