Dapper c#Inner join

时间:2014-09-07 19:05:35

标签: c# dapper dapper-extensions

嗨我在dapper中尝试执行该查询,但是对于我的类Client,列表contatos返回值为null,我不知道我做错了什么。我的班级Clt_cadCliente是一个客户有几个联系人(clt_cadContatos)。请帮助。

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;

类别:

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

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

2 个答案:

答案 0 :(得分:0)

我当然无法测试它,但我有类似的情况,如果你不插入表Clt_cadContatos的字段,特别是字段IdCliente的字段这个表,然后库无法解析splitOn参数

var lookup = new Dictionary<int, Clt_cadCliente>();
cn.Query<Clt_cadCliente, Clt_cadContatos, Clt_cadCliente>(@"
    SELECT s.*, a.IdCliente, a.OtherField1, a.OtherField2, etc ....
    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;

答案 1 :(得分:0)

你正在拆分错误的参数。您需要拆分IdContato

split on field告诉Dapper一个实体结束而下一个实体开始。如果您选择s.*后跟a.*,则要在表a的第一个字段上拆分为第二个实体(我假设您的sql表类似于您的类。)< / p>