In NHibernate (with NHibernate.Linq) you could do it as follows:
return session.Query()
.Single(a => a.Filter == filter &&
a.Id == session.Query()
.Where(a2 => a2.Filter == filter)
.Max(a2 => a2.Id));
Which will generate SQL like follows:
select *
from TableName foo
where foo.Filter = 'Filter On String'
and foo.Id = (select cast(max(bar.RowVersion) as INT)
from TableName bar
where bar.Name = 'Filter On String')
Which seems pretty efficient to me.