Criar predicado com uma BinaryExpression contendo vários parâmetros
é possível gerar dinamicamente esse predicado usandoLambdaExpressions
?
Expression<Func<Test, bool>> predicate = t =>
t.Levels.Any(l =>
l.LevelDetails.Any( ld =>
ld.LevelDate > DbFunctions.AddDays(t.TestDate, 1)
)
);
Enquanto os parâmetros no interiorBinaryExpression
são idênticos ou a parte correta da expressão é constante, não há problema. Mas a expressão de exemplold.LevelDate > DbFunctions.AddDays (t.TestDate, 1)
contém dois diferentesExpressionParameters
que são independentes um do outro. O que estou procurando é algo como isto:
Expression<Func<LevelDetail, DateTime?>> left =
ld => ld.LevelDate;
Expression<Func<Test, DateTime?>> right =
t => DbFunctions.AddDays(t.TestDate, 1);
BinaryExpression expr =
Expression.GreaterThan(
((LambdaExpression)left).Body,
((LambdaExpression)right).Body
);
Expression<Func<Test, bool>> predicate = t =>
t.Levels.Any(l =>
l.LevelDetails.Any( **expr** )
);
class Test {
public DateTime TestDate { get; set; }
public virtual ICollection<Level> Levels { get; set; }
}
class Level {
public virtual ICollection<LevelDetail> LevelDetails { get; set; }
}
class LevelDetail {
public DateTime LevelDate { get; set; }
}
Atenciosamente!