2011-10-06 32 views
2

我有db的表中的字段:Id,Key,Value。我有幾個完全相同的密鑰
我想通過NHibernate 3.2.0.4獲得IQuerable集合表,通過Key來區分。
我試圖這樣做,以便:
1.var items = dr.Localization.GetQuery().Distinct(new MyComparer());
和接收:
無法解析表達式「值(NHibernate.Linq.NhQueryable`1 [AbstractDataRepository.Domain.ILocalization])個不同的(值(LEditorExtension .Presentation.Controllers.MyComparer))':目前不支持方法'System.Linq.Queryable.Distinct'的重載。
2.var items = dr.Localization.GetQuery().GroupBy(x => x.Key).Select(g => g.First());
在'項目'中收到null。
dr.Localization.GetQuery()。GroupBy(x => x.Key):表達式不能包含lambda表達式
有什麼辦法可以解決這個問題嗎?謝謝!與NHibernate獲取獨特的IQueryable

+0

公共類MyComparer:的IEqualityComparer { 公共BOOL等於(ILocalization的x,ILocalization Y) { 回報(x.Key == y.Key); } public int GetHashCode(ILocalization obj) { return obj.Key.GetHashCode(); } } –

回答

1

這裏的問題是,您的查詢是針對您的自定義比較器無效的數據庫發起的,因爲它無法轉換爲有效的SQL。因此,如果您認爲可以在sql中執行distinct,那麼您可以通過指定您希望將其區分的屬性進行嘗試。

如果你還想使用自定義比較器先做一個List(),然後做一個獨特的。

dr.Localization.GetQuery().List().Distinct(new MyComparer()); 
+0

我需要智能定製Telerik Grid上的CustomBinding,而不是列表 –

+0

如果您必須有IQueryable,那麼您可以在Distinct調用後添加.AsQueryable()。 – jasonp