What sql is it generating for you? I ran a similar query on my own project to compare and it resulted it a single select statment:
var query = from entry in Session.Linq<Entry>()
where entry.EntrySplits.Any(x => x.Amount > 100)
select entry;
query.ToList();
(I won't post the sql as I don't currently have pretty nhprof formatted output available to me)
This should work but perhaps it has something to do with how your collection is map. Here is my HBM file:
The Entry side:
<bag name="EntrySplits" inverse="true" cascade="save-update,delete-orphan">
<key column="idEntry" on-delete="cascade" />
<one-to-many class="AccountingManager.Model.EntrySplit,AccountingManager.Model" />
</bag>
The EntrySplit side:
<many-to-one name="Entry" index="entry_index" class="AccountingManager.Model.Entry,AccountingManager.Model" column="idEntry" cascade="none" not-null="true" />
As you can see I have an inverse relationship set up so perhaps that is the reason. Although, I can't think why the Criteria query is producing a different result that NHLinq. Make sure you are running the latest version
http://ayende.com/Blog/archive/2009/07/26/nhibernate-linq-1.0-released.aspx
Chris