Ответ 1
Учитывая DataContext context
и string tableName
, вы можете просто сказать:
var table = (ITable)context.GetType()
.GetProperty(tableName)
.GetValue(context, null);
Мне нужно получить данные таблицы из имени таблицы из Linq DataContext.
Вместо этого
var results = db.Authors;
Мне нужно сделать что-то вроде этого.
string tableName = "Authors";
var results = db[tableName];
Это может быть любое имя таблицы, доступное в DataContext.
Учитывая DataContext context
и string tableName
, вы можете просто сказать:
var table = (ITable)context.GetType()
.GetProperty(tableName)
.GetValue(context, null);
Я не уверен, что передача строк является изящным решением. Я предпочел бы отправить тип объекта в качестве аргумента методу. Что-то в этих строках:
var table = _dataCont.GetTable(typeof(Customer));
Здесь - документация MSDN.
Я не уверен, что предлагаю это как ХОРОШЕЕ решение, но если вам это действительно нужно, вы можете сделать что-то вроде этого:
MyDBContext db = new MyDBContext();
Type t = db.GetType();
PropertyInfo p = t.GetProperty("Authors");
var table = p.GetValue(db, null);
Это даст вам таблицу авторов, как пр. Таблица.
Если вы знаете тип, вы можете его бросить. Из 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);
}
}