NHibernate(3.3.1)LINQ-Select()对每个对象调用了多次

NHibernate(3.3.1)LINQ-Select()对每个对象调用了多次,linq,nhibernate,Linq,Nhibernate,我编写了一个LINQ扩展方法,简化如下: public static class NHibernateSelectWithoutProxies { public static IQueryable<T> SelectWithoutProxies<T>(this IQueryable<T> query) where T : new() { return query.Select<T, T>(x => Transf

我编写了一个LINQ扩展方法,简化如下:

public static class NHibernateSelectWithoutProxies
{
    public static IQueryable<T> SelectWithoutProxies<T>(this IQueryable<T> query) where T : new()
    {
        return query.Select<T, T>(x => Transform<T>(x));            
    }

    private static T Transform<T>(T source) where T : new()
    {
        return source;  // Simplified                                           
    }
}
公共静态类NHibernateSelectWithoutProxies
{
公共静态IQueryable SelectWithoutProxies(此IQueryable查询),其中T:new()
{
返回查询。选择(x=>Transform(x));
}
私有静态T转换(T源),其中T:new()
{
返回源;//简化
}
}
从数据库中选择了2条记录。但是,“Transform(source)”调用了3次,其中2次在同一个“source”上

(注意:执行查询并调用ToList()后,列表包含2条记录。NHibernate LINQ似乎忽略了Select返回的非唯一对象)

此行为仅在查询具有获取时发生,例如:

var groups = repository.Get()
                       .FetchMany(x => x.Members)
                       .Where(...)
                       .SelectWithoutProxies()
                       .ToList<ContactGroup>(); 
var groups=repository.Get()
.FetchMany(x=>x.Members)
.其中(…)
.SelectWithoutProxies()选项
.ToList();
将产生groups.Count==2和三个转换调用

然而:

var groups = repository.Get()
                       .Where(...)
                       .SelectWithoutProxies()
                       .ToList<ContactGroup>(); 
var groups=repository.Get()
.其中(…)
.SelectWithoutProxies()选项
.ToList();
将产生groups.Count==2和两个转换调用

在我看来,这似乎是一个错误,但我可能错过了一些东西。这是预期的行为吗