Your Predicate Filter should look like the following:
SELECT Table1_ID, ... FROM Table1
INNER JOIN Table2 ON Table1.Table1_ID = Table2.Table1_ID
...
WHERE
Table1.Table1_ID IN (a, list, of, IDs)
Table2.DateFrom = (
SELECT MAX(Table2.DateFrom)
WHERE Table2.Table1_ID = Table1.Table1_ID)
// C#
IPredicateExpression filter = new PredicateExpression();
// First Predicate
int[] values = new int[3] {1, 2, 5};
filter.Add(new FieldCompareRangePredicate(
Table1Fields.Table1_ID, null, values));
// which is equal to:
//filter.Add(Table1Fields.Table1_ID == values);
// Second Predicate
EntityField2 FiledMax = EntityFieldFactory.Create(Table2FieldIndex.DateFrom);
FiledMax.AggregateFunctionToApply = AggregateFunction.Max
filter.Add(new FieldCompareSetPredicate(EntityFieldFactory.Create(Table2FieldIndex.DateFrom), null, FiledMax , null, SetOperator.In,
PredicateFactory.CompareExpression(Table2FieldIndex.Table1_ID,
ComparisonOperator.Equal,
new Expression(Table1FieldIndex.Table1_ID))
, false));