#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
Комментариев нет:
Отправить комментарий