我有此域中的對象: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一個Attivita
與NomeProcesso
,SocietaDiretta.NomeSocieta
和SocietaService.NomeSocieta
的每Process
所以我想提取: 我不得不從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,因爲它想只是一個ID列表。所以第一個問題是我該如何做到這一點?
第二個問題是,我怎麼能只選擇我從不同的對象需要領域,從不同層次聚集來了嗎?
編輯:
現在我嘗試
_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
。凡(X => ps.SocietaAttivate.IsIn(elencoPS))不編譯,因爲我嘗試同時ISIN只有不與對象集合 –
更新工作,嘗試使用上面的代碼 –
太棒了! WhereRestrictionOn和Where有什麼區別? –