//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