Array
(
)

Agrupar informações de duas coleções de dados.

Elessandro Poças
   - 18 jul 2014

Possuo 3 classes:
Cliente
public class Cliente
{
public int IDCliente { get; set; }
public DateTime DtCadastro { get; set; }
}
Cliente Fisica
using System;
namespace ObjetoTransferencia
{
public class ClienteFisica
{
public int Acao { get; set; }
public Cliente Cliente { get; set; } //Instância da classe cliente
public string Nome { get; set; }
public string Cpf { get; set; }
public string Rg { get; set; }
public DateTime DtNascimento { get; set; }
public string Endereco { get; set; }
public string Complemento { get; set; }
public string Bairro { get; set; }
public string Cep { get; set; }
public string Cidade { get; set; }
public string Estado { get; set; }
public string Situacao { get; set; }
public Decimal LimiteCredito { get; set; }
public string NomePai { get; set; }
public string NomeMae { get; set; }
public string Email { get; set; }
public string TelFixo { get; set; }
public string TelCelular { get; set; }
public string Observacao { get; set; }
}
}
Cliente Juridica
using System;
namespace ObjetoTransferencia
{
public class ClienteJuridica
{
public int Acao { get; set; }
public Cliente Cliente { get; set; } //Instância da classe cliente
public string Razao { get; set; }
public string Fantazia { get; set; }
public string Cnpj { get; set; }
public string Ie { get; set; }
public DateTime DtFundacao { get; set; }
public string Endereco { get; set; }
public string Complemento { get; set; }
public string Bairro { get; set; }
public string Cep { get; set; }
public string Cidade { get; set; }
public string Estado { get; set; }
public string Situacao { get; set; }
public decimal LimiteCredito { get; set; }
public string Email { get; set; }
public string HomePage { get; set; }
public string TelFixo { get; set; }
public string TelCelular { get; set; }
public string NomeResponsavel { get; set; }
public string CpfResponsavel { get; set; }
public string RgResponsavel { get; set; }
public string TelFixoResponsavel { get; set; }
public string TelCelularResponsavel { get; set; }
public string EmailResponsavel { get; set; }
public string Observacao { get; set; }
}
}

Possuo uma classe de coleção para cada classe da seguinte forma:
public class ClienteColecao: List<Cliente>
{
}
public class ClienteFisicaColecao: List<Cliente>
{
}
public class ClienteJuridicaColecao: List<Cliente>
{
}
Minha aplicação possui somente uma tela de cadastro para ambos os tipos de cliente. Nas regras de negócio eu consigo gravar, só não consegui trazer do banco de dados os 2 tipos de cliente para que eu possa realizar uma alteração ou consulta de um registro. Estou usando Store Procedure para manipular dados e fazer as consultas. Só consigo trazer os dados de apenas uma coleção mas preciso juntar os dados das 2. Segue abaixo código de consulta de apenas na classe ClienteFisica:
public ClienteFisicaColecao ConsultarClienteFisicaPorNome(string nome)
{
try
{
ClienteFisicaColecao clienteColecao = new ClienteFisicaColecao();
acessoDadosSqlServer.LimparParametros();
acessoDadosSqlServer.AdicionarParametros("@Nome", nome);
DataTable dtCliente = acessoDadosSqlServer.ExecutarConsulta(CommandType.StoredProcedure, "uspClienteConsultarNomeCpf");
foreach (DataRow linha in dtCliente.Rows)
{
ClienteFisica clienteFisica = new ClienteFisica();
ClienteJuridica clienteJuridica = new ClienteJuridica();
clienteFisica.Cliente = new Cliente();
clienteFisica.Cliente.Empresa = new Empresa();
clienteJuridica.Cliente = new Cliente();
clienteFisica.Cliente.Empresa.IDEmpresa = Convert.ToInt32(linha["IDEmpresa"]);
clienteFisica.Cliente.IDCliente = Convert.ToInt32(linha["IDCliente"]);
clienteFisica.Nome = Convert.ToString(linha["NomeRazao"]);
clienteFisica.Cpf = Convert.ToString(linha["CpfCnpj"]);
clienteJuridica.NomeResponsavel = Convert.ToString(linha["NomeResponsavel"]);
//clienteFisica.Rg = Convert.ToString(linha["RgIe"]);
//clienteJuridica.Ie = Convert.ToString(linha["RgIe"]);
//clienteFisica.DtNascimento = Convert.ToDateTime(linha["DtNascimentoFundacao"]);
//clienteFisica.Endereco = Convert.ToString(linha["Endereco"]);
//clienteFisica.Complemento = Convert.ToString(linha["Complemento"]);
//clienteFisica.Bairro = Convert.ToString(linha["Bairro"]);
//clienteFisica.Cep = Convert.ToString(linha["Cep"]);
//clienteFisica.Cidade = Convert.ToString(linha["Cidade"]);
//clienteFisica.Estado = Convert.ToString(linha["Estado"]);
//clienteFisica.Situacao = Convert.ToString(linha["Situacao"]);
//clienteFisica.LimiteCredito = Convert.ToDecimal(linha["LimiteCredito"]);
//clienteFisica.NomePai = Convert.ToString(linha["NomePai"]);
//clienteFisica.NomeMae = Convert.ToString(linha["NomeMae"]);
//clienteFisica.Email = Convert.ToString(linha["Email"]);
//clienteFisica.TelFixo = Convert.ToString(linha["TelFixo"]);
//clienteFisica.TelCelular = Convert.ToString(linha["TelCelular"]);
//clienteFisica.Observacao = Convert.ToString(linha["Observacao"]);
//clienteJuridica.NomeResponsavel = Convert.ToString(linha["NomeResponsavel"]);
clienteColecao.Add(clienteFisica);
}
return clienteColecao;
}
catch (Exception ex)
{
throw new Exception("Cliente não cadastrado: " + ex.Message);
}
}
O projetos é em 3 Camadas.

Joel Rodrigues
   - 18 jul 2014

Acredito que você precise fazer uma UNION na consulta, unindo os dados das duas tabelas. Porém, lembre-se de adequar as colunas das duas, para que fiquem iguais, pois só assim você conseguirá unir os resultados.

Obs: estou considerando que é apenas uma consulta que lista ambos os tipos de cliente.

Joel Rodrigues
   - 18 jul 2014

Mais uma coisa: não entendi por que ClienteFisico e ClienteJuridico possuem uma propriedade do tipo Cliente. Acredito que a relação aí é de HERANÇA e não COMPOSIÇÃO.