Pergunta

Eu não sou um grande fã de conjuntos de dados assim que eu usar POCO para retornar dados. Tenho conseguido paginação e classificação usando métodos personalizados que eu criar para um tipo POCO que os trabalhos sobre o tamanho da página e dar-me um conjunto da coleção POCO completa de cada vez, eu uso métodos que cheque de nome do DataItem clicado e ordem de classificação para fazer esse tipo. Criação de tais métodos mais e mais para cada POCO que você pretende usar com um controle de dados ASP.net como Gridview é muito doloroso.

Existe uma técnica para automatizar isso para que eu não preciso de fazer tais métodos cada vez para um novo POCO para que ele funcione como se estivesse usando um DataTable? Eu posso fornecer mais alguma explicação, se necessário.

NOTA:. Algumas pessoas podem chamar POCO como DTOs

EDIT: Eu encontrei este artigo sobre este tema . É este o caminho só é possível chegar ao que eu estou tentando fazer ??

Foi útil?

Solução

Eu concordo com a ideia de classe base, pois isso vai salvar todo o código duplicado. Uma coisa que eu fiz isso dá um passo nessa direção é criar uma classe para lidar com a classificação de qualquer lista genérica (para DTO / POCO). Isso permitiu-me para classificar uma lista no meu apresentador ou code-behind com apenas 1 linha de código.

Normalmente, para SortExpression eu voltar o nome da propriedade do DTO você deseja classificar. Além disso, o SortDirection seria um simples "Crescente" Ou "Decending"

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

Aqui é a classe que eu usei

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);
         }
     }
 }

Outras dicas

Eu criei uma classe base Entity. Meus DAOs dela derivam e têm propriedades que correspondem às colunas da tabela (na maior parte). Meu DAL retorna Lista para qualquer consulta e que é ligável a um GridView.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top