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

时间:2012-08-07 10:58:43

标签: 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 => Transform<T>(x));            
    }

    private static T Transform<T>(T source) where T : new()
    {
        return source;  // Simplified                                           
    }
}

从数据库中选择了2条记录。但是,“变换(源)”被称为3次,其中2次在同一“源”上。

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

仅当查询具有Fetch时才会发生此行为,例如:

var groups = repository.Get()
                       .FetchMany(x => x.Members)
                       .Where(...)
                       .SelectWithoutProxies()
                       .ToList<ContactGroup>(); 

将导致groups.Count == 2和三次调用Transform。

然而:

var groups = repository.Get()
                       .Where(...)
                       .SelectWithoutProxies()
                       .ToList<ContactGroup>(); 

将导致groups.Count == 2和两次调用Transform。

在我看来这是一个错误,但我可能会遗漏一些东西。这是预期的行为吗?

0 个答案:

没有答案