Объединение выражений C # с таблицами данных ADO.NET - PullRequest
2 голосов
/ 14 марта 2019

У меня есть общие запросы, для которых тип возвращаемого значения может быть другим.Из-за этого я не могу использовать TVF, и поэтому я использую Datatables.

Я также хочу расширить запрос данных.

Я пытаюсь сделать это следующим образом:

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.

Этот код, однако, не работает для моего Datatable.Он не генерирует никаких ошибок, но фильтры также не уменьшают данные.(Я предполагаю, что это, среди прочего, потому что запрос материализуется до вызова функции AsQueryable)

Кто-нибудь знает способ, которым я могу создать логику, которую пытаюсь реализовать?(Под этим я подразумеваю создание одного большого запроса, который реализуется только после того, как запрос был полностью создан)

1 Ответ

1 голос
/ 14 марта 2019

Может ли быть так, что GetDataTable (). AsEnumarable () возвращает список DataRow, в то время как GetFilteredList типизируется в некоторый класс сущностей?

Если это так, то вам следует каким-то образом преобразовать ваши «фильтры» в строку в форме WHERE (Filter1 = 'value1') AND ... и поместить ее в строку SQL, которую вы передаете в GetDataTable () .

...