문제

나는 데이터 세트의 열렬한 팬이 아니므로 poco를 사용하여 데이터를 반환합니다. 페이지 크기에서 작동하는 POCO 유형에 대해 작성하고 한 번에 완전한 POCO 컬렉션 세트를 제공하는 사용자 정의 메소드를 사용하여 페이징 및 정렬을 달성했습니다. DataItem의 이름을 확인하고 주문을 정렬하는 메소드를 사용합니다. 그런 종류를 수행합니다. GridView와 같은 ASP.NET 데이터 컨트롤과 함께 사용하려는 모든 POCO에 대해 이러한 방법을 계속해서 만들어내는 것은 매우 고통 스럽습니다.

새로운 poco를 위해 매번 그러한 방법을 만들 필요가 없도록이를 자동화하는 기술이 있습니까? 필요한 경우 더 많은 설명을 제공 할 수 있습니다.

참고 : 어떤 사람들은 Poco를 DTO로 부를 수 있습니다.

편집 : 나는 이것을 발견했다 기사 이 주제에 대해. 이것이 내가하려는 일에 도달 할 수있는 유일한 방법입니까?

도움이 되었습니까?

해결책

기본 클래스 아이디어에 동의하면 모든 중복 코드가 저장됩니다. 이 방향으로 한 단계를 밟은 한 가지는 일반 목록 (DTO/POCO)의 정렬을 처리 할 수있는 클래스를 만드는 것입니다. 이를 통해 발표자 또는 코드 베어드에서 1 줄의 코드만으로 목록을 정렬 할 수있었습니다.

일반적으로 SortExpression의 경우 정렬하려는 DTO의 속성 이름을 반환합니다. 또한, 정렬 방향은 간단한 "오름차순"또는 "퇴직"입니다.

List<Supplier> SupplierList = mSupplierService.GetSuppliers();
SupplierList.Sort(new GenericComparer<Supplier>(mView.SortExpression, mView.SortDirection));
mView.Suppliers = SupplierList;

여기 내가 사용한 수업이 있습니다

public class GenericComparer<T> : IComparer<T>
 {

     private string mDirection;
     private string mExpression;

     public GenericComparer(string Expression, string Direction)
     {
         mExpression = Expression;
         mDirection = Direction;
     }

     public int Compare(T x, T y)
     {
         PropertyInfo propertyInfo = typeof(T).GetProperty(mExpression);
         IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
         IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);
         if (mDirection == "Ascending") {
             return obj1.CompareTo(obj2);
         }
         else {
             return obj2.CompareTo(obj1);
         }
     }
 }

다른 팁

엔티티베이스 클래스를 만들었습니다. 내 daos는 그것에서 파생되어 테이블 열에 해당하는 속성이 있습니다 (대부분). 내 DAL은 모든 쿼리에 대한 목록을 반환하며 이는 GridView에 바인딩 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top