2009-08-31 77 views
4

我使用NHibernate的2.1与LINQ提供程序,我得到这个查询回结果有多个根节点:独特的结果

public IList<Country> GetAllCountries() 
{ 
    List<Country> results = (from country in _session.Linq<Country>() 
          from states in country.StateProvinces 
          orderby country.DisplayOrder, states.Description 
          select country) 
          .Distinct() 
          .ToList(); 

      return results; 
} 

我知道,使用标准的API你可以调用DistinctRootEntityResultTransformer()来确保你得到一个唯一的根节点,但是我正在把大部分查询切换到NHibernate LINQ提供程序,并且我没有看到一个方法。

http://nhforge.org/wikis/howtonh/get-unique-results-from-joined-queries.aspx

+0

我遇到同样的问题... – 2009-09-08 18:44:01

+0

如果您将映射从FetchType.Join更改为FetchType.Select,它将解决此问题(只要获得正确的结果)。但就Disctin()调用而言,我怀疑Linq实现中的Distinct()是错误的。 – 2009-09-08 18:49:44

+0

我第二次克里斯关于LINQ Distinct()方法的断言。它无法按照预期的方式工作。希望这将在更高版本中得到纠正。 – 2009-09-08 19:26:45

回答

2

对于Northwind数据库,我想从领土......这句法工作正常找回了不同的区域。

(from t in Territories 
from r in Regions 
select new 
{ 
    r.RegionDescription 
}) 
.Distinct().OrderBy(r => r.RegionDescription) 

在微软论坛here上有帖子,可能有帮助。