sohaib
sohaib

Reputation: 113

How to do more than one level projection in query over?

I tired this

respondentSanctionSubquery = respondentSanctionSubquery.Select(x => x.Respondent.Incident.Id);

but i got this exception : enter image description here

i have 3 entities not 2 entities :

class Respondent
{
public IncidentObj{get;set;}
}
class Incident
{
public int Id{get;set;}
}
class RespondentSanction
{
public Respondent RespondentObj{get;set;}
}

Upvotes: 1

Views: 187

Answers (3)

sohaib
sohaib

Reputation: 113

you should do join between the entities using Join alias

respondentSanctionSubquery = 
    respondentSanctionSubquery
        .JoinAlias(x => x.RespondentObj)
        .JoinAlias(resp => resp.IncidentObj)
        .Select(inc => inc.Id);

for more information please check this URL :What is the difference between JoinQueryOver and JoinAlias?

Upvotes: 1

Andrew Whitaker
Andrew Whitaker

Reputation: 126042

You have to do a JOIN in order to do a projection like that:

respondentSanctionSubquery = 
    respondentSanctionSubquery
        .JoinQueryOver(x => x.RespondentObj)
        .JoinQueryOver(resp => resp.IncidentObj)
        .Select(inc => inc.Id);

Upvotes: 1

Low Flying Pelican
Low Flying Pelican

Reputation: 6054

You have to join other entities also to the main query (as follows),

X x = null; 
Respondent respondent = null;
Incident incident = null;

respondentSanctionSubquery = respondentSanctionSubquery
        .JoinQueryOver(() => x.Respondent , () => respondent)
        .JoinQueryOver(() => respondent.Incident , () => incident )
        .Select(r => incident.Id);

or else you might want to go for subqueries,

X x = null; 
Respondent respondent = null;
Incident incident = null;

    var subQuery = (QueryOver<Respondent>)session.QueryOver<Respondent>(() => respondent)
                  .JoinQueryOver(() => respondent.Incident , () => incident )
                  .Where(() => respondent.Id == x.Respondent.Id)
                  .Select(r => incident.Id);

    var query = session.QueryOver(() => x)
                .SelectList(l => l.SelectSubQuery(subQuery));

Upvotes: 1

Related Questions