How to check if there is a person in the database who has exactly two (or more) specific addresses? (QueryOver)

71 Views Asked by At

I want to check if there is a person in the database who has exactly two specific addresses.

My proper SQL query:

SELECT name, id FROM person 
WHERE person.name = 'Kxxx' AND person.firstname = 'Axxx'
AND EXISTS (
SELECT address.id FROM address INNER JOIN city 
WHERE address.person_id = person.id AND city.name = 'Hxxx' AND address.h_number = '4')
AND EXISTS (
SELECT address.id FROM address INNER JOIN city 
WHERE address.person_id = person.id AND city.name = 'Dxxx' AND address.h_number = '5')
;

I am trying to create (C# and QueryOver) but with no proper effects:

Person personAlias = null;
Address addressAlias = null;
City cityAlias = null;

var query = session.QueryOver(() => personAlias)
            .Where(() => personAlias.Name == name)
            .Where(() => personAlias.FirstName == firstName)
            ;

foreach (var addr in addresses)
{
    var subQuery = QueryOver.Of(() => addressAlias)
                    .Where(() => addressAlias.HouseNumber == addr.HouseNumber)
                    .JoinAlias(() => addressAlias.CityRef, () => cityAlias)
                    .Where(() => cityAlias.Name == addr.CityName)
                    ;
                    
    subQuery.Select(x => x.Id);
    query.WithSubquery.WhereExists(subQuery);
}
1

There are 1 best solutions below

0
altaaf.hussein On

This might be a silly question, but is there no reason you cannot do a COUNT()