У меня есть фильтр, который я хотел бы добавить к каждому из моих запросов в качестве основы для любого из моих запросов, которые я собираюсь выполнить в базе данных.Это будет означать, что мне не нужно добавлять фильтр (filter.Eq("deleted", false) & filter.Eq("another query", null)
при каждом вызове, который я совершаю в мою коллекцию.
Используя в прошлом другие свободно распространяемые интерфейсы, я предположил, что мы могли бы просто передать конструктордобавив столько фильтров, сколько мне нравится, пока я фактически не буду готов выполнить запрос, а затем я вызову команду .Build()
, и это, наконец, даст мне мой FilterDefinition
объект.
Однако, когда я пытаюсь объединитьEq()
вызывает, что он просто конвертируется в FilterDefinition
сразу, вместо того, чтобы оставить его как FilterDefinitionBuilder
до тех пор, пока не настало время. Это кажется довольно нерастяжимым и недальновидным для Монго, так как добавление функциональности .Build()
позволило бывам нужно более гибко объединять команды.
Во-первых, есть ли причина для принятия решения сделать это таким образом. Я хочу понять, почему это было сделано так, потому что я знаю, что люди не простопроизвольно принимать эти решения.
Во-вторых, кому-нибудь удалось написать какие-либо методы расширения, которые быпомогите мне с моим текущим затруднением, что они не будут против делиться.
Моей первой попыткой было включить что-то вроде следующего:
public static FilterDefinitionBuilder<TDocument>(this FilterDefinitionBuilder<TDocument> filter)
{
var name = GetCollectionName<TDocument>();
return filter.Eq("deleted", false);
}
Затем я бы вызвал это из функции-оболочки, которую я использовал бы вместо вызова статического Builders<CosmosDocumentType>.Filter
Я бывызовите служебную функцию, которая обернет это и вернет объект FilterDefinitionBuilder
, к которому я могу добавить еще несколько фильтров.
После завершения я хотел бы вызвать метод .Build()
, а затем получить довольно симпатичный и довольно функциональный объект FilterDefinition
, который получит, какие документы я хочу получить из коллекции.
Наличие этого .Build()
также позволило бы мне запрашивать все документы в коллекции, которые не были удалены, без добавления дополнительных фильтров, потому что в настоящее время это, кажется, единственный способ конвертировать между FilterDefinitionBuilder
и FilterDefinition
.
Другой альтернативой является написание моей собственной обертки Fluent вокруг функциональности и пропустите ее через FilterDefinitionBuilder
в конце, когда я убедился, что у меня есть все фильтры на месте.
Если есть способ вытащить существующие фильтры из FilterDefinition
, это также может помочь.