Reproduced with RTL v5.0.8.
Works
TestMethod]
public void PredicateBuilderOrder()
{
var predicate = PredicateBuilder.Null<EmployeeEntity>();
predicate = predicate.Or(c => c.HireDate == null);
predicate = predicate.Or(c => c.BirthDate < DateTime.Now);
using (var adapter = new DataAccessAdapter())
{
var metaData = new LinqMetaData(adapter);
var q = metaData.Employee.Where(predicate);
var results = q.ToList();
}
}
Expression in the trace log:
value(SD.LLBLGen.Pro.LinqSupportClasses.DataSource2`1[NW.LLBL.MSSQL.Adapter.v50.EntityClasses.EmployeeEntity]).Where(c => ((c.HireDate == null) OrElse (Convert(c.BirthDate) < Convert(Convert(DateTime.Now)))))
Fails
TestMethod]
public void PredicateBuilderOrder()
{
var predicate = PredicateBuilder.Null<EmployeeEntity>();
predicate = predicate.Or(c => c.BirthDate < DateTime.Now);
predicate = predicate.Or(c => c.HireDate == null);
using (var adapter = new DataAccessAdapter())
{
var metaData = new LinqMetaData(adapter);
var q = metaData.Employee.Where(predicate);
var results = q.ToList();
}
}
Expression in the trace log:
value(SD.LLBLGen.Pro.LinqSupportClasses.DataSource2`1[NW.LLBL.MSSQL.Adapter.v50.EntityClasses.EmployeeEntity]).Where(c => ((c.BirthDate < Convert(DateTime.Now)) OrElse (Convert(c.HireDate) == Convert(null))))
The difference and the cause of error seems to be in **Convert(null) **. We will look into it.