question

MartinPalermo-6721 avatar image
0 Votes"
MartinPalermo-6721 asked karenpayneoregon answered

GENERATE A LIST WITH CHILDS

123239-image.png
I have the data from the image.

I have a method to build a list with its children the key field is CardCode, I have this code but I use the cantidad field or in English quantity to determine the number of children that the CarddCode field contains that I do in the sql query, I wanted to know if There is another way to add the children to each element in the list if it did not have the quantity field.

  public List<Cliente> ListadoClientes()
         {
             List<Cliente> ListaClientes = new List<Cliente>();
    
             using (SqlConnection cn = new SqlConnection(ConfigurationManager.AppSettings["cn"].ToString()))
             {
                 int numero = 1;
                 SqlCommand cmd = new SqlCommand("USP_GET_DOCUMENTS_AND_ADDRESS", cn);
                 cmd.CommandType = System.Data.CommandType.StoredProcedure;
                 cn.Open();
                 SqlDataReader reader = cmd.ExecuteReader();
    
                 if (reader.HasRows)
                 {
                     while (reader.Read())
                     {
                         Cliente cliente = new Cliente();
                         cliente.CardCode = Convert.ToString(reader["CardCode"]);
                         cliente.CardName = Convert.ToString(reader["CardName"]);
                         cliente.CardType = Convert.ToString(reader["CardFName"]);
                         cliente.GroupCode = Convert.ToString(reader["GroupCode"]);
                         cliente.FederalTaxID = Convert.ToString(reader["FederalTaxID"]);
                         cliente.Phone1 = Convert.ToString(reader["Phone1"]);
                         cliente.EmailAddress = Convert.ToString(reader["MailAddres"]);
                         cliente.Currency = Convert.ToString(reader["MailAddres"]);
                         cliente.U_MSSL_BTP = Convert.ToString(reader["U_MSSL_BTP"]);
                         cliente.U_MSSL_BTD = Convert.ToString(reader["U_MSSL_BTD"]);
                         cliente.U_MSSL_BAP = Convert.ToString(reader["U_MSSL_BAP"]);
                         int cantidad = Convert.ToInt32(reader["cantidad"]);
                         cliente.BPAddressesSingle = new EBPAddresses();
                         cliente.BPAddressesSingle.AddressType = Convert.ToString(reader["AddrType"]);
                         cliente.BPAddressesSingle.AddressName = Convert.ToString(reader["Address"]);
                         cliente.BPAddressesSingle.Street = Convert.ToString(reader["Street"]);
                         cliente.BPAddressesSingle.Country = Convert.ToString(reader["Country"]);
                         cliente.BPAddressesSingle.State = Convert.ToString(reader["State"]);
                         cliente.BPAddressesSingle.County = Convert.ToString(reader["County"]);
                         cliente.BPAddressesSingle.City = Convert.ToString(reader["City"]);
                         cliente.BPAddressesSingle.State = Convert.ToString(reader["ZipCode"]);
                         if (numero == cantidad)
                         {
                             cliente.BPAddresses.Add(cliente.BPAddressesSingle);
                             ListaClientes.AddUnique(cliente);
                             cliente = new Cliente();
                             numero = 1;
                         }
                         else
                         {
                             cliente.BPAddresses.Add(cliente.BPAddressesSingle);
                             numero = numero + 1;
                         }
                         cliente.BPAddressesSingle = new EBPAddresses();
                         cliente.BPAddressesSingle.AddressType = Convert.ToString(reader["AddrType"]);
                         cliente.BPAddressesSingle.AddressName = Convert.ToString(reader["Address"]);
                         cliente.BPAddressesSingle.Street = Convert.ToString(reader["Street"]);
                         cliente.BPAddressesSingle.Country = Convert.ToString(reader["Country"]);
                         cliente.BPAddressesSingle.State = Convert.ToString(reader["State"]);
                         cliente.BPAddressesSingle.County = Convert.ToString(reader["County"]);
                         cliente.BPAddressesSingle.City = Convert.ToString(reader["City"]);
                         cliente.BPAddressesSingle.State = Convert.ToString(reader["ZipCode"]);
                         cliente.BPAddresses.Add(cliente.BPAddressesSingle);
                         ListaClientes.AddUnique(cliente);
                     }
                 }
             }
    
             return ListaClientes;
         }


dotnet-csharp
image.png (36.6 KiB)
· 2
5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.

Not sure I follow your logic exactly but sure seem like generate a list with childs (Children) would be group to start with count.

0 Votes 0 ·

Hello Karen
is correct,
I generate a list with their respective children, but I want to know if it is possible to do it in another way, without the need for the "cantidad" field, which tells me how many children each CardCode has.

If you notice it, the children are generated from the AddressType field.

0 Votes 0 ·

1 Answer

karenpayneoregon avatar image
0 Votes"
karenpayneoregon answered

Since I don't have your class or data the best I can do is provide a simple GroupBy/Count code sample as this way I know it works, no unknowns. It's not going to match up with you data as mentioned but you can learn, adapt to your data especially since my sample is generic, does not require reading from any data source no matter what yours may be.

Full source Code sample


5 |1600 characters needed characters left characters exceeded

Up to 10 attachments (including images) can be used with a maximum of 3.0 MiB each and 30.0 MiB total.