Get table-data from table-name in LINQ DataContext

前端 未结 4 1927
庸人自扰
庸人自扰 2020-11-28 13:46

I need to get table data from table name from Linq DataContext.

Instead of this

var results = db.Authors;

I need to do something li

相关标签:
4条回答
  • 2020-11-28 14:09

    I am not sure if passing strings is an elegant solution. I would rather send the Type of entity as an argument to a method. Something on these lines :

    var table = _dataCont.GetTable(typeof(Customer));
    

    Here is the MSDN documentation.

    0 讨论(0)
  • 2020-11-28 14:18

    I am not sure I'd suggest it as a GOOD solution, but if you really need it, you could do something like this:

    MyDBContext db = new MyDBContext();
    Type t = db.GetType();
    PropertyInfo p = t.GetProperty("Authors");
    var table = p.GetValue(db, null);
    

    That will give you the Authors table, as pr. Table.

    0 讨论(0)
  • 2020-11-28 14:25

    Given DataContext context and string tableName, you can just say:

    var table = (ITable)context.GetType()
                               .GetProperty(tableName)
                               .GetValue(context, null);
    
    0 讨论(0)
  • 2020-11-28 14:30

    If you know the type, you can cast it. From http://social.msdn.microsoft.com/Forums/en-US/f5e5f3c8-ac3a-49c7-8dd2-e248c8736ffd/using-variable-table-name-in-linq-syntax?forum=linqprojectgeneral

    MyDataContext db = new MyDataContext();
    Assembly assembly = Assembly.GetExecutingAssembly();
    Type t = assembly.GetType("Namespace." + strTableName);
    if (t != null)
    {
        var foos = db.GetTable(t);
    
        foreach (var f in foos)
        {
            PropertyInfo pi = f.GetType().GetProperty("Foo");
            int value = (int)pi.GetValue(f, null);
            Console.WriteLine(value);
        }
    }
    
    0 讨论(0)
提交回复
热议问题