#c_sharp #entity_framework #linq
Я использую Entity Framework. Есть некая функция, в которой происходит заполнение
dataGridView данными из таблицы.
private void data()
{
using (Context context = new Context())
{
var items = from Items in context.Table1
select Items;
dataGridView1.DataSource = items.ToList();
}
}
Но я хочу сделать универсальную функцию, чтобы имя таблицы передавалось через параметр.
Подскажите, как нужно модифицировать функцию, чтобы это стало возможным?
Что-то типа этого:
void Test()
{
data(tbl1);
data(tbl2);
}
private void data(SomeType tableName)
{
using (Context context = new Context())
{
var items = from Items in tableName
select Items;
dataGridView1.DataSource = items.ToList();
}
}
Ответы
Ответ 1
Если тип сущностей в таблицах одинаковый, то можно попробовать спустить функцию для выбора таблицы параметром: void Test() { data(c => c.tbl1); data(c => c.tbl2); } private void data(Func> tableSelector) { using (Context context = new Context()) { var items = from Items in tableSelector(context) select Items; dataGridView1.DataSource = items.ToList(); } } Если разный - добавьте генерик-параметр private void data (Func > tableSelector) { using (Context context = new Context()) { var items = from Items in tableSelector(context) select Items; dataGridView1.DataSource = items.ToList(); } } в живую не проверял, возможны опечатки Если нужно передавать имя таблицы именно как строку - придётся использовать reflection. Постарайтесь избегать этого :) Ответ 2
Вы можете воспользоваться SqlQuery: var sql = string.Format("SELECT * FROM [{0}]", tablename); var query = db.Database.SqlQuery
Комментариев нет:
Отправить комментарий