DetachedCriteria filter = DetachedCriteria.For(typeof(Project))Wonder why I got so many sql call to the server? the domain objects in the discussion context are Project has a Type and base on selected Type a project can choices a bunch of Outputs.
.Add(Expression.Eq("ID", pid))
.SetProjection(Projections.Property("Type"));
DetachedCriteria q = DetachedCriteria.For(typeof(List_Output), "op")
.CreateCriteria("ProjectTypes")
.Add(Subqueries.Exists(filter));
return q.GetExecutableCriteria(
holder.CreateSession(typeof(List_Output))
).List();

What I found and fix is Lazzzzzzzziiiiiiiiiiiiiiii :))
I forgot to tell Type to load Outputs in a Lazy way and vise versa once that done I got only one YEAH ! I mean ONE sql call to the server to get what I asked for instead of 2 + N (where N is number of relevant Outputs in a Type)
Thanks to DetachedCriteria & the Laziness until next time today magic word is "Lazy = true"