Получить данные таблицы из имени таблицы в LINQ DataContext - PullRequest
13 голосов
/ 17 декабря 2009

Мне нужно получить данные таблицы из имени таблицы из Linq DataContext.

Вместо этого

var results = db.Authors;

Мне нужно сделать что-то подобное.

string tableName = "Authors";

var results = db[tableName];

Это может быть любое имя таблицы, доступное в DataContext.

Ответы [ 4 ]

15 голосов
/ 18 декабря 2009

Учитывая DataContext context и string tableName, вы можете просто сказать:

var table = (ITable)context.GetType()
                           .GetProperty(tableName)
                           .GetValue(context, null);
4 голосов
/ 17 декабря 2009

Я не уверен, что передача строк - элегантное решение. Я бы лучше отправил Тип сущности в качестве аргумента методу. Что-то на этих строках:

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

Здесь - документация MSDN.

3 голосов
/ 18 декабря 2009

Я не уверен, что предложил бы это как ХОРОШЕЕ решение, но если оно вам действительно нужно, вы можете сделать что-то вроде этого:

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

Это даст вам таблицу авторов, как пр. Таблица.

0 голосов
/ 28 ноября 2013

Если вы знаете тип, вы можете разыграть его. От 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...