none
Passar delegate que vem do parâmetro no Select RRS feed

  • Pergunta

  • Tenho uma classe que faz paginação para mim. Esta classe é genérica e tem retono também genérico.

    public class ListaPaginada<TFonteDados, TSaida> : IListaPaginada<TFonteDados, TSaida> 
    
     

    Onde TFonteDados é o tipo da entidade que será feita a query. E TSaida é o tipo que será selecionado.

    Este é o delegate na classe de paginação...

    public Converter<TFonteDados, TSaida> MetodoConversao{get; private set;}

    E este é um exemplo de método para conversão

    public class DadosVisualizacaoBanco : DadosVisualizacao
    {
            public string Descricao { get; set; }
            public int Codigo { get; set; }
    
            public static DadosVisualizacaoBanco CriarDadoVisualizacaoAPartirDeEntidade(Banco item)
            {
                DadosVisualizacaoBanco retorno = new DadosVisualizacaoBanco();
                retorno.Id = item.Id;
                retorno.Descricao = item.Descricao;
                retorno.Codigo = item.Codigo ;
                return retorno;
            }
        }

    Este código nao tem nenhum erro de sintaxe e nem de tipagem, ele compila normalmente, mas quando chega no momento de executar da o seguinte erro:

    "Não há suporte ao tipo de nó de expressão LINQ 'Invoke' em LINQ to Entities."

    Há alguma maneira alternativa definir um método que seleciona apenas os campos que eu quero?

    +.+
    sexta-feira, 13 de novembro de 2009 12:31

Respostas

  • Bom... andei vendo os intelisense e procurando o que os Select, Where, etc fazem e vi que posso passar assim

    Select
    public TRetorno ConsultarCampos<TEntidade, TRetorno>(Expression<Func<TEntidade, TRetorno>> seletor)
    {
    return Db.CreateQuery<TEntidade>(Db.GetEntityName(typeof(TEntidade).
    Select(seletor).
    FirstOrDefault()));
    }

    E com o where a delegate deve retornar um bool.
    Obrigado a todos pela ajuda.

    +.+
    quinta-feira, 26 de novembro de 2009 00:12