You can create your predicate dinamically. For example:
var parameter = Expression.Parameter(typeof (TDAO));
var predicate = Expression.Lambda<Func<TDAO, bool>>(
Expression.Equal(Expression.Property(parameter, "Id"),
Expression.Constant(id)),
parameter);
var res = allItems.SingleOrDefault(predicate);