String in Entity Expression C #

1

I need to make a dynamic query similar to the example below

String tabela = "NomeTabela";
Var x = db.("NomeTabela").ToList();

Something like that where the table name will change as needed.

    
asked by anonymous 08.09.2018 / 13:37

1 answer

1

In your class DbContext create a method, for example, Set , which returns DbSet from the name passed in parameter (from your table):

public DbSet Set(string name)
{
    // talvez seja necessário adicionar o namespace do seu contexto
    return base.Set(Type.GetType(name));
}

Then you can do a query like this:

using (var db = new YourDataContext())
{
    // Como o DbSet não é genérico, não pode utilizar o código assim:
    // db.Set("Namespace.EntityName").AsQueryable().Where(a=> a.HasSomeValue...
    // As suas queries devem também ser à base de strings
    // Precisa utilizar o package/namespace nuget "System.Linq.Dynamic"
    var results = db.Set("Namespace.EntityName").AsQueryable().Where("SomeProperty > @1 AND SomeThing < @2", aValue, anotherValue);
    // agora consegue iterar a coleção dos objetos resultante
}

Answer given in SOen : Dynamic table name in Linq

More information about System.Linq.Dynamic here .

    
08.09.2018 / 13:56