Get table-data from table-name in LINQ DataContext

荒凉一梦 提交于 2019-11-26 22:53:21

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

var table = (ITable)context.GetType()
                           .GetProperty(tableName)
                           .GetValue(context, null);

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.

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.

DharmaTurtle

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);
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!