我有Personne(person)实体,包含子集合策略和程序。我想使用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'不能用于'System.Collections.Generic.IEnumerable`1 [System.Object]'
类型的参数如果我删除Select()行调用它会工作,但当然它会导致提取Personne列以及Polices and Procedures列。
有任何想法解决这个问题吗?
答案 0 :(得分:-2)
将返回类型'IList'更改为'IEnumerable'
答案 1 :(得分:-2)
将您的退货类型更改为IEnumerable
:
public IIEnumerable<Personne> GetForDTO(IList<int> ids)