2009-08-31 69 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上有帖子,可能有幫助。