2012-04-15 4 views
-1

이름이 CateringPurchaseOrder 인 테이블이 하나 있습니다. 이 테이블에는 이름이 "PONO"인 열이 하나 있습니다. 그 열은 같은 vlaue를 두 번 이상 포함합니다. "pono"열의 고유 한 값을 기반으로 레코드를 검색하려고합니다.linq to 엔티티 고유 메소드

예 :

pono column1 
1  value1 
1  value2 
2  value3 
2  value4 

출력 :

pono coulm1 
1   value1 
2   value3 

나는 다음과 같은 코드로 시도 :

IEnumerable<CateringPurchaseOrder> order = entites.CateringPurchaseOrders.Distinct<CateringPurchaseOrder>(new CateringPorderComparer()); 

public class CateringPorderComparer : IEqualityComparer<CateringPurchaseOrder> 
{ 
    bool IEqualityComparer<CateringPurchaseOrder>.Equals(CateringPurchaseOrder p1, CateringPurchaseOrder p2) 
    { 
     return p1.P_O_No == p2.P_O_No; 
    } 

    int IEqualityComparer<CateringPurchaseOrder>.GetHashCode(CateringPurchaseOrder obj) 
    { 
     return obj.P_O_No.GetHashCode(); 
    } 
} 

나는 다음과 같은 오류 있어요 :

LINQ to Entities does not recognize the method 'System.Linq.IQueryable`1[MilitarymessModel.CateringPurchaseOrder] Distinct[CateringPurchaseOrder](System.Linq.IQueryable`1[MilitarymessModel.CateringPurchaseOrder], System.Collections.Generic.IEqualityComparer`1[MilitarymessModel.CateringPurchaseOrder])' method, and this method cannot be translated into a store expression. 
을3210

이 문제에 대한 해결책이 있습니까?

답변

4

엔티티에 대한 Linq는 CateringPorderComparer를 SQL로 구문 분석 할 수 없습니다.

문제가되지 않는다면 데이터베이스를 사용하는 대신 C# 코드에서 Distinct 작업을 수행 할 수 있습니다. 얼마나 많은 행과 얼마나 많은 dupoicates가 있는지에 따라, 이것은 당신에게 문제가 아닐 수도 있습니다.

는 데이터베이스 쿼리 후 고유을 당신이 구별 할 전에 Eumerable로 변환하려면 :

entites.CateringPurchaseOrders.AsEnumerable().Distinct<CateringPurchaseOrder>(
new CateringPorderComparer()); 
+0

안녕하세요, 덕분에 내가 "난의 오류를받은 gridview에이 쿼리의 결과를 바인딩 할 때 데이터 소스는 서버 측 데이터 페이징을 지원하지 않습니다. " 이 문제에 대해 어떤 생각을 가지고 있습니까? –

+0

이것을 확인하십시오 : http://stackoverflow.com/questions/1661292/the-data-source-does-not-support-server-side-data-paging –

+0

AsEnumerable() 호출은 내 오류를 수정 한 마법이었습니다. Where()와 같은 함수를 사용하는 과부하를 갖는 것이 좋겠지 만 내가 얻을 수있는 것을 취할 것입니다. – Suncat2000