Ah, yes, sorry, now I understand! :-)
I don't think you can do it with Query Over or any other API, they always 
require a source entity.
But you can do it with SQL:

bool isMyConditionMet = session.CreateSQLQuery("case 
….")).UniqueResult<Boolean>() == true;

Or even better, with a named query:

bool isMyConditionMet = 
session.GetNamedQuery("CheckExistence").UniqueResult<Boolean>() == true;

Will that do?

RP

On Thursday, May 2, 2013 2:14:25 PM UTC+1, PeteA wrote:
>
> Guess I've not explained myself very well - sorry, and thanks for your 
> efforts to help.
>
>  
>
> Basically, I want to execute *just* the "case when exists (select 1 from 
> product where price < 100) then 1 else 0 end as [exists]" 
> part of your suggestion - that's the exact statement I want the DB to run, 
> nothing else.  I think that your suggestion below would execute something 
> like
>
>  
>
>                 select case when exists (select 1 from product where price 
> < 100) then 1 else 0 end as [exists]
>
> *                from Product*
>
> *                where Product.ProductType = 1*
>
>  
>
> Those last two lines (italicized) are what I want to avoid; I'm literally 
> after a single, scalar result of '1' if any row(s) match my condition or 
> '0' if none do.  Sort of like
>
>  
>
>                 bool isMyConditionMet = 
> session.QueryOver<void>().Select(SqlProjection("case ….")).Single() == 1;
>
>  
>
> /Pete
>
>  
>
> *From:* [email protected] <javascript:> [mailto:
> [email protected] <javascript:>] *On Behalf Of *Ricardo Peres
> *Sent:* 02 May 2013 12:11
> *To:* [email protected] <javascript:>
> *Subject:* Re: [nhusers] Re: Determine the existence of an entity meeting 
> a condition
>
>  
>
> I may have misunderstood, but what about this, which is basically the same 
> thing?
>
>  
>
> var exists = session.QueryOver<Product>().Where(x => x.ProductType == 
> 1).Select(NHibernate.Criterion.Projections.SqlProjection("case when exists 
> (select 1 from product where price < 100) then 1 else 0 end as [exists]", new 
> String[] { "exists" }, new IType[] { NHibernateUtil.Boolean 
> })).SingleOrDefault<Boolean>();
>
>  
>
> RP
>
>
>
> On Thursday, May 2, 2013 10:56:41 AM UTC+1, PeteA wrote:
>
> Don't think so, unfortunately - my reading of that is that it'll produce a 
> table with two columns (Name and pricerange) with a row per Product?  My 
> requirement is to produce a scalar result (0 or 1) depending upon whether 
> there is / is not an entity meeting the condition - effectively I want a 
> QueryOver<void>.
>
>  
>
> As an aside, I believe that the 'case' part is actually 
> Projections.Conditional, so 
> "case when price < 100 then 1 else 2 end as pricerange" could be 
> refactored slightly as Projections.Conditional(Restrictions.Lt(x => 
> x.Price, 100), Projections.Constant(1), Projections.Constant(2))
>
>  
>
> Thanks for the suggestion :)
>
>  
>
> /Pete
>
>  
>
> *From:* [email protected] [mailto:[email protected]] *On 
> Behalf Of *Ricardo Peres
> *Sent:* 02 May 2013 10:40
> *To:* [email protected]
> *Subject:* [nhusers] Re: Determine the existence of an entity meeting a 
> condition
>
>  
>
> You know you can mix Query Over with Criteria, so you can use something 
> like:
>
>  
>
> var l = 
> session.QueryOver<Product>().Select(NHibernate.Criterion.Projections.Property<Product>(x
>  => x.Name), NHibernate.Criterion.Projections.SqlProjection("case when price 
> < 100 then 1 else 2 end as pricerange", new String[] { "pricerange" }, new 
> IType[] { NHibernateUtil.String })).List<Object[]>();
>
>  
>
> Will that do?
>
>  
>
> RP
>
> On Thursday, May 2, 2013 10:16:52 AM UTC+1, PeteA wrote:
>
> I know this should be simple, but I seem to be being brain-dead today…  
> given some entity Foo, how can I write a QueryOver that translates into the 
> following SQL:
>
>  
>
> select case
>
>                 when exists (select 1 from FooTable where Name='some 
> name') then 1
>
>                 else 0
>
> end
>
>  
>
> I.E. - I want to be able to determine in code if the entity already 
> exists; counting them would be trivial, but I don't want to do that because 
> there could be a lot and it's a significant amount of unnecessary work for 
> the DB.  The inner subquery is easy enough - how do I generate the outer 
> query though, which doesn't have a 'from' statement?
>
>  
>
> Thanks,
>
>  
>
> /Pete
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "nhusers" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at http://groups.google.com/group/nhusers?hl=en-US.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  
>
> -- 
> You received this message because you are subscribed to the Google Groups 
> "nhusers" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to [email protected] <javascript:>.
> To post to this group, send email to [email protected] <javascript:>
> .
> Visit this group at http://groups.google.com/group/nhusers?hl=en-US.
> For more options, visit https://groups.google.com/groups/opt_out.
>  
>  
>

-- 
You received this message because you are subscribed to the Google Groups 
"nhusers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/nhusers?hl=en-US.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to