Linq Query dynamics between two contexts

1

I'm trying to return the following sql query but to no avail.

SQL=
select IDEstado, COUNT(IDEstado) from PessoaEstado w 
join Nucleo.dbo.Estado e on e.ID = w.IDEstado
where IDPessoaMaster = 46
group by IDEstado

Code=
var dbApp = new App();

var dbNucleo = new Nucleo();
var estados = (from e in dbNucleo.Estado
                select new { e.ID, e.Nome }).ToArray();

var result = (from w in db.PessoaEstado
              join e in estados on w.IDEstado equals e.ID
              where w.IDPessoaMaster == IDPessoaMaster
              group new { w, e } by new
              {
                  e.Nome
              } into z
              select new
              {
                nome = z.Key.Nome;
                qtd = z.Count()
              }).OrderByDescending(x => x.qtd);

return result.ToList<dynamic>();

returns error:

  

Could not create constant value of type 'Anonymous type'.   Only primitive types or enumeration types are supported in this   context.

    
asked by anonymous 16.05.2014 / 22:28

1 answer

0

Make Linq to Objects

You are working in contexts ( DbContext ) and the best workaround would be to bring in object and then relate to Linq To Objects / a>, another point to note is to bring the data and not put it in DbContext " ( AsNoTracking )

Like

IList<Estado> Estados = dbNucleo.Estado.AsNoTracking().ToList();
IList<PessoaEstado> PessoasEstados = db.PessoaEstado.AsNoTracking().ToList();

Linq

var resultado = PessoaEstado
                .Where(x=>x.IDPessoaMaster == 46)
                .Join(Estado, p => p.IDEstado, e => e.ID, (p, e) => new { p, e })
                .GroupBy(x => x.p.IDEstado)                
                .Select(s => new
                {
                    IDEstado = s.Key,
                    CountEstado = s.Count()
                }).ToList();

Running Example - Fictitious Data

IList<PessoaEstado> PessoaEstado = new List<PessoaEstado>();
PessoaEstado.Add(new PessoaEstado() { IDEstado = 1, IDPessoaMaster = 46 });
PessoaEstado.Add(new PessoaEstado() { IDEstado = 2, IDPessoaMaster = 46 });
PessoaEstado.Add(new PessoaEstado() { IDEstado = 1, IDPessoaMaster = 46 });

IList<Estado> Estado = new List<Estado>();
Estado.Add(new Estado() { ID = 1 });
Estado.Add(new Estado() { ID = 2 });


var resultado = PessoaEstado
   .Where(x=>x.IDPessoaMaster == 46)
   .Join(Estado, p => p.IDEstado, e => e.ID, (p, e) => new { p, e })
   .GroupBy(x => x.p.IDEstado)                
   .Select(s => new
   {
        IDEstado = s.Key,
        CountEstado = s.Count()
   }).ToList();

    
16.05.2014 / 23:06