none
como usar expressões lambda em tipos desconhecidos RRS feed

  • Pergunta

  • //tenho as seguintes classes

    public ChildTableAttribute : Attribute
    {
    
    }

    class Item
    {
            public int Id { get; set; }
            public int OrderId { get; set; }
    }

    class Order 
    {
            public int Id { get; set; }
    
            [ChildTableAttribute]
            List<Item> Items { get; set; }
    }

    public class MyAdapter { public List<Model> Read<Model>() where Model: new() { List<Model> result = ...; //obtém os dados do banco de dados e os converte na instância de List<Model> PropertyInfo[] properties = ...; //pega as propriedades de Model foreach (PropertyInfo property in properties) { if (property is mapped to ChildTableAttribute) { //o código real foi abstraído, porque é muito grande, isso é apenas uma idéia de como obter o objeto filho //pega todos os registros sem filtro na tabela filha do banco de dados e os converte em List< property generic type > //chamada recursiva object childTable = this.Read< property generic type >(); //loop em result para definir as propriedades que representam uma tabela filha no banco de dados foreach (Model modelInstance in result) { //O PROBLEMA ESTA AQUI, eu preciso filtrar ChildTable para obter apenas os itens relativos a modelInstance atual //algo como isso... property.SetValue(modelInstance, childTable.where(/*filtro aki*/), null); //a pergunta é: como usar uma expressão lambda de um tipo desconhecido, neste caso, o tipo genérico de ChildTable //pode ser por conversão de strings em expressões lambda //Obs: Eu não quero usar a biblioteca Dynamic Linq Library que transforma strings em expressões lambda. //Eu vi alguns exemplos na Internet usando esta biblioteca em 3,5 dotnet //no entanto estou usando dotnet 4.0 e mesmo que funcione no 4 não pretendo usar bibliotecas de terceiros } } }

    return result; } }


    //exemplo utilizando as classes acima:

    MyAdapter adp = new MyAdapter();
    
    //fill list of orders with your items
    List<Order> orders = adp.Read<Order>();
    //o problema está descrito no trecho de codigo comentado
    //desde já agradeço
    • Editado Joab Silveira quinta-feira, 14 de fevereiro de 2013 03:06
    quinta-feira, 14 de fevereiro de 2013 03:04

Respostas