Dapper c # Inner join

c# dapper dapper-extensions

Question

Salut Im essayant de faire cette requête dans dapper, mais la liste contatos retourne avec les valeurs null pour ma classe Client, je ne sais pas ce que je fais mal. ma classe Clt_cadCliente est un client a plusieurs contacts (clt_cadContatos). Aidez-moi, s'il vous plaît.

var lookup = new Dictionary<int, Clt_cadCliente>();

            cn.Query<Clt_cadCliente, Clt_cadContatos, Clt_cadCliente>(@"
                            SELECT s.*, a.*
                            FROM Clt_cadCliente s
                            INNER JOIN Clt_cadContatos a ON s.IdCLiente = a.IdCliente  ", (s, a) =>
                            {
                                Clt_cadCliente shop;
                                if (!lookup.TryGetValue(s.IdCliente, out shop))
                                {
                                    lookup.Add(s.IdCliente, shop = s);
                                }
                                shop.Clt_cadContatos.Add(a);
                                return shop;
                            }, splitOn: "IdCliente").AsQueryable();

            var resultList = lookup.Values;

Classe:

public partial class Clt_cadCliente
{
    public int IdCliente { get; set; }
    public Nullable<int> IdClientePai { get; set; }
    public string Codigo { get; set; }
    public string Nome { get; set; }
    public Nullable<System.DateTime> DataNasc { get; set; }
    public string Sexo { get; set; }
    public Nullable<int> IdEstCivil { get; set; }
    public string CPF { get; set; }
    public string RG { get; set; }
    public Nullable<System.DateTime> DataAdm { get; set; }
    public bool Pendencias { get; set; }
    public string DescPendencia { get; set; }
    public string Obs { get; set; }
    public string PessoaFJ { get; set; }
    public string NomeFantasia { get; set; }
    public string CodDep { get; set; }
    public string AtivoInativo { get; set; }
    public bool Ativado { get; set; }
    public Nullable<int> IdSitBloq { get; set; }
    public Nullable<int> SitBloq { get; set; }
    public string Profissao { get; set; }
    public string Empresa { get; set; }
    public string NomeEsposa { get; set; }
    public Nullable<System.DateTime> NascEsposa { get; set; }
    public Nullable<int> IdNaturezaPadrao { get; set; }
    public Nullable<int> ViaCarteirinha { get; set; }
    public Nullable<int> Casa { get; set; }
    public Nullable<int> Renda { get; set; }
    public Nullable<int> RendaComplementar { get; set; }
    public string Naturalidade { get; set; }
    public string Banco { get; set; }
    public string Agencia { get; set; }
    public string CidadeBanco { get; set; }
    public bool VeiculoProprio { get; set; }
    public Nullable<System.DateTime> DIB { get; set; }
    public string Foto { get; set; }
    public string Nbeneficio { get; set; }
    public Nullable<bool> LiberarExame { get; set; }
    public Nullable<System.DateTime> ValidadeExame { get; set; }
    public Nullable<int> EnviaBoleto { get; set; }
    public Nullable<int> IdUsuario { get; set; }
    public Nullable<long> IdClienteGlobal { get; set; }
    public virtual IList<Clt_cadContatos> Clt_cadContatos { get; set; }
}

Classe 2:

public partial class Clt_cadContatos
{
    public int IdContato { get; set; }
    public string Nome { get; set; }
    public string Telefone { get; set; }
    public string Email { get; set; }
    public bool AdicionarLista { get; set; }
    public Nullable<int> IdCliente { get; set; }
}

Réponse populaire

Vous divisez sur le mauvais paramètre. Vous devez diviser sur IdContato .

Le champ split on indique à Dapper où une entité se termine et la suivante commence. Si vous sélectionnez s.* Suivi d' a.* Vous voulez diviser en une deuxième entité sur le premier champ de la table a (je suppose que vos tables SQL ressemblent à vos classes.)



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi