#c# #datatable #edmx
#c# #datatable #edmx
Вопрос:
У меня есть общие запросы, к которым возвращаемый тип может отличаться. Из-за этого я не могу использовать TVFS и поэтому использую таблицы данных.
Я также хочу расширить запрос к datatable.
Я пытаюсь сделать это следующим образом:
var data = GetDataTable($"SELECT * FROM {tablename}").AsEnumerable().AsQueryable().GetFilteredList(filters);
Ниже приведено определение функции GetFilteredList:
IQueryable<T> GetFilteredList<T>(this IQueryable<T> items, List<PostedFilter> filters)
Логика в функциях GetDataTable и GetFilteredList верна, поскольку они используются уже несколько лет. Однако они используются отдельно, поскольку поступают из разных библиотек. Параметр filters содержит строки, которые являются именами свойств запросов. Таким образом, запрос может быть расширен перед выполнением. Это прекрасно работает со статическими mvc-запросами к типизированным объектам EDMX.
Однако этот код не работает для моей таблицы данных. Это не генерирует никаких ошибок, но фильтры также не уменьшают объем данных. (Я предполагаю, что это, среди прочих причин, связано с тем, что запрос выполняется до вызова функции AsQueryable)
Кто-нибудь знает способ, которым я могу создать логику, которую я пытаюсь реализовать? (Под этим я подразумеваю создание одного большого запроса, который выполняется только после того, как запрос был полностью создан)
Комментарии:
1. Что такое
GetDataTable
возвращаемый тип? И зачем вы вызываетеAsEnumerable()
, если вы не хотите материализовывать данные?2. Каков возвращаемый тип
GetDataTable
? Также неясно, какGetFilteredList
применять фильтры к datatable. Насколько ваша таблица данных отличается от существующих?3. * Возвращаемый тип GetDataTable — это DataTable * Список GetFiltered применяет фильтры путем сравнения свойства объекта посредством отражения со строками, отправленными вместе
4. Действительно ли начальные запросы являются общими или просто отличаются способом запроса полей?
5. @Schwarzie2478: Все запросы будут выполняться по шаблону «ВЫБРАТЬ * ИЗ «имени таблицы». Именно после этого я хочу расширить их с помощью фильтров, наборов заказов и других агрегированных методов для создания различных запросов.
Ответ №1:
Может ли быть так, что GetDataTable().AsEnumarable() возвращает список DataRow, в то время как GetFilteredList присваивается какому-либо классу сущностей?
Если это так, то вам следует каким-то образом преобразовать ваши «фильтры» в строку в форме WHERE (Filter1 = ‘value1’) И … и поместить это в вашу строку SQL, которую вы передаете в GetDataTable().