2011-10-06 1 views
2

나는 ID, Key, Value 필드를 가진 db 테이블을 가지고있다. 나는 여러 개의 동일한 키가있다.
키로 구분 된 NHibernate 3.2.0.4를 통해 IQuerable 테이블 컬렉션을 가져오고 싶다.
내가 너무 그것을 시도 :
1var 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) : 식에 람다식이 포함될 수 없습니다.
이 문제를 해결할 수있는 방법이 있습니까? 감사!NHibernate와 Distinct IQueryable 얻기

+0

공용 클래스 MyComparer : IEqualityComparer { 공개 BOOL 같음 (ILocalization의 X, Y의 ILocalization) {창 (x.Key == y.Key); } public int GetHashCode (ILocalization obj) { return obj.Key.GetHashCode(); } } –

답변

1

여기서 문제는 올바른 SQL로 변환 할 수 없으므로 사용자 지정 비교기가 유효하지 않은 db에 대해 쿼리가 실행되고 있다는 것입니다. 따라서 SQL에서 고유 한 작업을 수행 할 수 있다고 생각되면 고유 한 속성을 지정하여 시도 할 수 있습니다.

사용자 지정 비교자를 계속 사용하려면 먼저 List()를 수행 한 다음 고유 한 비교를 수행하십시오.

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

목록이 아닌 Telerik Grid에서 CustomBinding에 IQeryable이 필요합니다. –

+0

IQueryable이 있어야하는 경우 Distinct 호출 후에 .AsQueryable()을 추가 할 수 있습니다. – jasonp