У меня есть этот домен объекты:Nhibernate queryover соответствие два IEnumerable
public class Societa : EquatableObject<Societa>
{
public virtual int IdSocieta { get; set; }
public virtual string NomeSocieta { get; set; }
}
public class Attivita {
public virtual int IdAttivita { get; set; }
public virtual IEnumerable<ProcessoEsaminato> Processi
}
public class ProcessoEsaminato {
public virtual ProcessoSocieta ProcessoCoperto { get; set; }
public virtual int Anno { get; set; }
}
public class ProcessoSocieta {
public override int Id { get; set; }
public virtual Societa SocietaDiretta { get; set; }
public virtual Societa SocietaService { get; set; }
}
public class Processo {
public virtual int Id { get; set; }
public virtual string NomeProcesso { get; set; }
public virtual IEnumerable<ProcessoSocieta> SocietaAttivate
}
я nedd извлечь из БД с QueryOver или LinqToNHibernate каждый Process
из Attivita
с NomeProcesso
, SocietaDiretta.NomeSocieta
и SocietaService.NomeSocieta
Так я думаю: Я должен начать с Processo
и получить те, что в их SocietaAttivate
имеет то, что находится в Processi
коллекция Attivita
, глядя на ProcessoCoperto
свойство каждого элемента этой коллекции
я попробовать это:
public IEnumerable<object> ProcessiPerAttivita (Attivita att) {
ProcessoSocieta ps = null;
var elencoPS = att.Processi.Select(p => p.ProcessoCoperto).ToList<ProcessoSocieta>();
return _session.QueryOver<Processo>()
.JoinAlias(processo => processo.SocietaAttivate,() => ps)
.Where(x => x.SocietaAttivate.IsIn(elencoPS))
.List();
}
но Where(x => x.SocietaAttivate.IsIn(elencoPS))
не то, что я nedd, так как он хочет только список ид. поэтому первый вопрос: как я могу это сделать?
Второй вопрос: как я могу выбрать только поля, которые мне нужны из разных объектов, исходя из разных уровней агрегации?
EDIT:
Сейчас я стараюсь
_session.QueryOver<Processo>()
.JoinAlias(processo => processo.SocietaAttivate,() => ps)
.Where(x => x.SocietaAttivate.Any(p => elencoPS.Contains(p)) != null)
.List();
, но я получаю variable 'x' of type 'ProcessoSocieta' referenced from scope '', but it is not defined
.гда (х => ps.SocietaAttivate.IsIn (elencoPS)) не компилировать и, как я стараюсь тем время ISIN только не работает с объектом сбор –
Обновлен, попробуйте с кодом выше –
отлично! какая разница между WhereRestrictionOn и Where? –