Troubleshooting: JOINs com LINQ to SharePoint

Olá SharePointers,

Compartilho com todos que seguem meu blog esse post do meu amigo e parceiro de trabalho Rodrigo Romano, sobre um troubleshooting que pode ser muito útil para desenvolvedores utilizando o SharePoint 2010 e o LINQ to SharePoint.

Segue texto retirado do seu blog:

Pessoal, hoje eu estava com um problema que era executar uma query com joins. Na minha lista tinha vários campos LOOKUPs (Consulta) (Quer saber como manipulá-los programaticamente? http://www.canalsharepoint.com.br/tutoriais/Tutoriais/Utilizando%20Campos%20de%20Consulta%20(Lookup)%20Programaticamente.aspx) e ao executar a query o seguinte erro era retornado:

A consulta usa elementos sem suporte, como referências a mais de uma lista, ou a projeção de uma entidade completa usando EntityRef/EntitySet.

Procurei várias referências e não achei nada para me ajudar.. Até que finalmente descobri o problema:

Como Internamente o Linq to SharePoint gera um CAML (Collaborative Application Markup Language) que não tem suporte nativo para Joins, o Linq Provider também não suporta, pois para fazer o join ele precisa baixar uma quantidade de dados enorme para o cliente. Como não tem sentido você utilizar o Linq (que executa a query remotamente) no cliente, o servidor simplesmente dispara este erro para informar o desenvolvedor.

 

SOLUÇÃO

Para resolver este problema, você pode forçar a query ser executada do lado do cliente, simplesmente colocando o AsEnumerable() na frente da fonte de dados:

exemplo:

NÃO FUNCIONA FUNCIONA

//Query Expressions
var items = (from emp in dc.GenericList
             where emp.Id == Convert.ToInt32(FileID)                                
             orderby emp.Id descending
             select new
             {
                 emp.Title,
                 emp.Sala.Capacidade,
                 emp.ID,
                 emp.Cinema.Endereco

             }).Take(1);

//Query Expressions
var items = (from emp in dc.GenericList.AsEnumerable()
             where emp.Id == Convert.ToInt32(FileID)                                
             orderby emp.Id descending
             select new
             {
                 emp.Title,
                 emp.Sala.Capacidade,
                 emp.ID,
                 emp.Cinema.Endereco

             }).Take(1);

 —

É isso ai Romano, parabéns pelo seu post, considero de muita utilidade!

Abraços.

Anúncios

Uma resposta to “Troubleshooting: JOINs com LINQ to SharePoint”

  1. Rodrigo Says:

    Obrigado pelo crédito Wagner!! Abraços =D

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s


%d blogueiros gostam disto: