Создание функции для запроса с помощью linq в синглтоне MongoDB ⇐ C#
-
Anonymous
Создание функции для запроса с помощью linq в синглтоне MongoDB
Я создаю одноэлементный класс для запроса коллекций mongo в веб-API .Net 6. Поскольку мое приложение будет запрашивать несколько разных коллекций в трех разных базах данных, я создаю функцию, которая получает имена коллекции и базы данных вместе с параметрами запроса.
публичный класс MongoReader { частный MongoClient _client; общедоступный MongoReader (строка ConnectionString) { Пакет ConventionPack = новый ConventionPack(); package.Add(новый IgnoreExtraElementsConvention(true)); ConventionRegistry.Register("Соглашения моего решения",pack,t => true); _client = новый MongoClient (connectionString); } public async Task QueryCollection(коллекция строк, фильтр FilterDefinition,int limit = 50,intatchSize = 50), где T: класс { string[] CollectionInformation = Collection.Split('.'); строка CollectionName = CollectionInformation[1]; строка CollectionDatabase = CollectionInformation[0]; List list = новый List (); FindOptions findOptions = новый FindOptions() { Limit = limit, BatchSize = BatchSize }; Курсор IAsyncCursor = await _client.GetDatabase(collectionDatabase).GetCollection(collectionName).FindAsync(filter, findOptions); список = ожидание курсора.ToListAsync(); список возврата; } } Текущий класс имеет только функцию с параметром FilterDefinition, но мне также нужна аналогичная функция, которая позволила бы мне использовать Linq в качестве аргумента. Как я могу это сделать?
Вот как я хочу вызвать функцию:
MongoReader _reader = новый MongoReader("connectionstring"); интервал интервала = 50; INT BatchSize = 50; List list = await _reader.QueryCollectionLinqAsync("DatabaseName.CollectionName", t => t.fieldName == fieldValue,limit,batchSize); Это то, что я пытаюсь сделать, в настоящее время не работает, потому что у Where() нет ToListAsync(), хотя при использовании MongoDB.Driver.Linq: public async Task QueryCollection(коллекция строк, предикат Func, int limit = 50, intatchSize = 50), где T : класс { string[] CollectionInformation = Collection.Split('.'); строка CollectionName = CollectionInformation[1]; строка CollectionDatabase = CollectionInformation[0]; List list = новый List(); Опции AggregateOptions = новые AggregateOptions () {BatchSize = BatchSize}; return await _client.GetDatabase(collectionDatabase).GetCollection(collectionName).AsQueryable(options).Where(predicate).Take(limit).ToListAsync(); }
Я создаю одноэлементный класс для запроса коллекций mongo в веб-API .Net 6. Поскольку мое приложение будет запрашивать несколько разных коллекций в трех разных базах данных, я создаю функцию, которая получает имена коллекции и базы данных вместе с параметрами запроса.
публичный класс MongoReader { частный MongoClient _client; общедоступный MongoReader (строка ConnectionString) { Пакет ConventionPack = новый ConventionPack(); package.Add(новый IgnoreExtraElementsConvention(true)); ConventionRegistry.Register("Соглашения моего решения",pack,t => true); _client = новый MongoClient (connectionString); } public async Task QueryCollection(коллекция строк, фильтр FilterDefinition,int limit = 50,intatchSize = 50), где T: класс { string[] CollectionInformation = Collection.Split('.'); строка CollectionName = CollectionInformation[1]; строка CollectionDatabase = CollectionInformation[0]; List list = новый List (); FindOptions findOptions = новый FindOptions() { Limit = limit, BatchSize = BatchSize }; Курсор IAsyncCursor = await _client.GetDatabase(collectionDatabase).GetCollection(collectionName).FindAsync(filter, findOptions); список = ожидание курсора.ToListAsync(); список возврата; } } Текущий класс имеет только функцию с параметром FilterDefinition, но мне также нужна аналогичная функция, которая позволила бы мне использовать Linq в качестве аргумента. Как я могу это сделать?
Вот как я хочу вызвать функцию:
MongoReader _reader = новый MongoReader("connectionstring"); интервал интервала = 50; INT BatchSize = 50; List list = await _reader.QueryCollectionLinqAsync("DatabaseName.CollectionName", t => t.fieldName == fieldValue,limit,batchSize); Это то, что я пытаюсь сделать, в настоящее время не работает, потому что у Where() нет ToListAsync(), хотя при использовании MongoDB.Driver.Linq: public async Task QueryCollection(коллекция строк, предикат Func, int limit = 50, intatchSize = 50), где T : класс { string[] CollectionInformation = Collection.Split('.'); строка CollectionName = CollectionInformation[1]; строка CollectionDatabase = CollectionInformation[0]; List list = новый List(); Опции AggregateOptions = новые AggregateOptions () {BatchSize = BatchSize}; return await _client.GetDatabase(collectionDatabase).GetCollection(collectionName).AsQueryable(options).Where(predicate).Take(limit).ToListAsync(); }
Мобильная версия