我有 Personne(人)实体,其中包含子集合 Policy and Procedures。我想使用 Future 查询的功能加载一批 Personnes 并加载这些集合。但!我被要求不要在获取策略和程序的查询中复制 Personne 的列,这对于优化从数据库传输到服务器的数据量似乎是明智的。
这就是我最终要做的。
public IList<Personne> GetForDTO(IList<int> ids)
{
IEnumerable<Personne> query = NHibernateSession.Current.Query<Personne>()
.Fetch(x => x.Adresse)
.Where(x => ids.Contains(x.Id))
.ToFuture();
var queryWithPolices = NHibernateSession.Current.Query<Personne>()
.FetchMany(x => x.Polices)
.Where(x => ids.Contains(x.Id))
.Select(x => new
{
x.Id,
x.Polices
})
.ToFuture();
var queryWithProcedures = NHibernateSession.Current.Query<Personne>()
.FetchMany(x => x.Procedures)
.Where(x => ids.Contains(x.Id))
.Select(x => new
{
x.Id,
x.Procedures
})
.ToFuture();
return query.ToList();
}
此查询不起作用,出现错误:Collections.IList' cannot be used for parameter of type 'System.Collections.Generic.IEnumerable`1[System.Object]'
如果我删除 Select() 行调用,它确实有效,但当然它会导致 Personne 列以及 Policys 和 Procedures 列被获取。
有解决这个问题的想法吗?