NHibernate(3.3.1)LINQ-Select()对每个对象调用了多次
我编写了一个LINQ扩展方法,简化如下: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
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和两个转换调用
在我看来,这似乎是一个错误,但我可能错过了一些东西。这是预期的行为吗