none
Classe agregada C# RRS feed

  • Pergunta

  • Boa noite pessoal, gostaria de  umas dicas sobre como retornar valores para um classe agregada em C# que está dentro de uma classe base?

    Cenário: Tenho um método que realiza a consulta no banco de dados:

       private List<T> GetSelect()
            {
                clsConnection = new clsStringConnection();
    
                            Type type = typeof(T);
                StringBuilder sbQry = new StringBuilder();
                System.Reflection.PropertyInfo[] propInfo = type.GetProperties();
                foreach (System.Reflection.PropertyInfo pi in propInfo)
                {
                    if (sbQry.ToString() == string.Empty)
                        sbQry.AppendFormat("Select {0}", pi.Name);
                    else
                        sbQry.AppendFormat(", {0}", pi.Name);
                }
    
                if (sbQry.ToString() != string.Empty)
                    sbQry.AppendFormat(" From {0} ", type.Name.Replace("cls", string.Empty));
    
           
                
            //This create a new list with the same type of the generic class
            List<T> genericList = new List<T>();
          
    
            //For each row in the datatable
    
            foreach (DataRow row in clsConnection.ExecutarSelect(sbQry.ToString()).Rows)
            {
                //Create a new instance of the generic class
                object defaultInstance = Activator.CreateInstance(type);
                //For each property in the properties of the class
                foreach (PropertyInfo prop in propInfo)
                {
                    try
                    {
                        //Get the value of the row according to the field name
                        //Remember that the classïs members and the tableïs field names
                        //must be identical
                        object columnvalue = row[prop.Name];
                        //Know check if the value is null. 
                        //If not, it will be added to the instance
                        if (columnvalue!= DBNull.Value)
                        {
                            //Set the value dinamically. Now you need to pass as an argument
                            //an instance class of the generic class. This instance has been
                            //created with Activator.CreateInstance(t)
                            prop.SetValue(defaultInstance, columnvalue, null);
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(prop.Name + ": " + ex.ToString());
                        return null;
                    }
                }
                //Now, create a class of the same type of the generic class. 
                //Then a conversion itïs done to set the value
                T myclass = (T)defaultInstance;
                //Add the generic instance to the generic list
                genericList.Add(myclass);
            }
    
    
            return genericList;
            }

    e a classe que tem outra classe como agregada:

    class clssis_configuracaoform { int intID; List<clssis_form> clsForm = new List<clssis_form>(); string strnomeDesign; int intfk_controlesTipos; string strTexto; bool blnAtivo; int intAltura; int intLargura; bool blnVisivel; string strImage; public int IntID { get { return intID; } set { intID = value; } } public clssis_configuracaoform() { } public clssis_configuracaoform(clssis_form obj) { this.clsForm.Add(obj); }

    ...

    }

    Gostaria de preencher os dados desta classe ai. Já tentei outros métodos mas vejo que tem formas melhores e dinâmicas usando o LINQ para esta situação alguém pode passar alguma dica ou exemplo? Agradeço....

    quinta-feira, 14 de maio de 2015 22:18

Respostas

Todas as Respostas

  • Não entendi o que você deseja. Seu select retorna uma lista genérica, agora vc tem uma classe "clssis_configuracaoform" que vc deseja preencher a lista "List<clssis_form> clsForm"? Ou você quer alterar o seu método select para usar LINQ?

    Att. Andre de Mattos Ferraz

    sexta-feira, 15 de maio de 2015 11:52
  • Exato desejo preencher a lista "List<clssis_form> clsForm...
    sábado, 16 de maio de 2015 17:01