#c# #asp.net-core #odata
Вопрос:
У меня есть контроллер OData со следующей функцией:
[ODataAttributeRoutingAttribute] [EnableQuery(PageSize = 10)] [HttpGet] public virtual IActionResult Get() { var data = _dbContext.MyTable; return Ok(data); }
Когда я выполняю вызов odata с фильтрами, инструкциями по порядку и т. Д., Я вижу, что фильтры применяются к сгенерированному SQL.
Теперь у меня есть более сложный запрос, который нужно написать. Я унаследовал плохой дизайн базы данных и не могу его изменить.
В этом проекте одна и та же структура таблиц существует в нескольких базах данных. Итак, DB1, DB2 .. DB(n) все содержат таблицу транзакций. В основном каждая база данных представляет данные за месяцы, причем DB1-это текущий месяц, а DB2-предыдущий месяц и так далее…
Мне нужно сделать запрос к базе данных, который вернет все транзакции для данного клиента за последние x месяцев. (x должен быть указан в качестве параметра).
Поскольку таблицы находятся в разных базах данных, у меня есть несколько DbContexts, введенных в мой контроллер. Итак, я подумывал о том, чтобы сделать что-то вроде этого:
IEnumerablelt;Transactionsgt; m1 = null; IEnumerablelt;Transactionsgt; m2 = null; IEnumerablelt;Transactionsgt; m3 = null; if ( pMonthsBack gt;=1 ) m1 = dbContext1.Transactions.Where( t =gt; t.Customer = pCustomerId); if ( pMonthsBack gt;=2 ) m1 = dbContext2.Transactions.Where( t =gt; t.Customer = pCustomerId); if ( pMonthsBack gt;=3 ) m1 = dbContext3.Transactions.Where( t =gt; t.Customer = pCustomerId); return m1.Union(m2).Union(m3);
Вопрос в том, как мне создать функцию, подобную описанной выше, в OData? И конкретно — могу ли я построить его так, чтобы все обычные функции Odata все еще работали ? Например, пейджинг, топ и т. Д.
Похоже, что «неограниченные функции» делают что-то подобное? На правильном ли я пути с ними?