使用FetchMany并在Linq中选择NHibernate查询

时间:2015-03-27 10:25:26

标签: c# linq nhibernate nhibernate-futures

我有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列。

有任何想法解决这个问题吗?

2 个答案:

答案 0 :(得分:-2)

将返回类型'IList'更改为'IEnumerable'

答案 1 :(得分:-2)

将您的退货类型更改为IEnumerable

public IIEnumerable<Personne> GetForDTO(IList<int> ids)