2015-02-09 7 views
1

Я устал этоКак выполнить более одного уровня проекции в запросе?

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

, но я получил это исключение: enter image description here

У меня есть 3 сущности не 2 лиц:

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

ответ

1

вы должны сделать соединение между объектами с использованием Регистрация псевдоним

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

для получения дополнительной информации, пожалуйста, проверьте этот URL: What is the difference between JoinQueryOver and JoinAlias?

1

Вы должны сделать JOIN для того, чтобы сделать такие как:

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

Это работает только с двумя сущностями, но у меня есть 3 объекта, связанные друг с другом, найдите обновленный вопрос. – sohaib

+0

также, пожалуйста, не я пытаюсь сделать это в Sub Query. (Этот ответчикSanctionSubquery - это запрос). – sohaib

+0

@sohaib: Пожалуйста, см. Мое обновление. –

1

Вы должны присоединиться к другим организациям также основному запросу (как следует),

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

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

или иначе Вы могли бы хотеть пойти для подзапросов,

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)); 
+0

Я попробовал это, но получил это исключение. Подзапрос вернул более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <= , >,> = или когда подзапрос используется как выражение. ' – sohaib

+0

Очевидно, что у вас более одного инцидента за x, и именно по этой причине вы получаете эту ошибку, поэтому вам, вероятно, стоит пойти на первый вариант. –

+0

Не могли бы вы, пожалуйста, снова увидеть вопрос, я сделал некоторые изменения на нем. – sohaib