Подтвердить что ты не робот

Is AsQueryable метод ушел в новый Mongodb С# драйвер 2.0rc?

Прежде всего, я новичок в MongoDb. В MongoDb С# driver 1.9.x, я могу взять коллекции как запросы с помощью метода AsQueryable, подобного этому.

        var db = client.GetServer().GetDatabase("test");
        var col = db.GetCollection("Video");
        var qrlist = col.AsQueryable();

Я установил новый драйвер 2.0rc и, используя его, я не могу использовать метод AsQueryable, потому что он отсутствует. Отъезд или есть другой способ сделать это? (Я уже включил MongoDB.Driver.Linq).

        var db = client.GetDatabase("test");
        var col = db.GetCollection<Contact>("Contact"); //GetCollection without <T> is missing to.
        var qrlist = col.AsQueryable(); // AsQueryable missing here.

Как я могу получить мои сущности как запрашиваемые в новом драйвере, нужна помощь от гуру MongoDb. Спасибо.

4b9b3361

Ответ 1

Обновление за 19 октября:

Драйвер MongoDB 2.1 отсутствует https://github.com/mongodb/mongo-csharp-driver/releases/tag/v2.1.0

Он поддерживает LINQ:

LINQ

Поддержка CSHARP-935 LINQ была переписана и теперь нацелена на структуру агрегации. Это более естественный перевод и позволяет использовать многие функции LINQ, которые ранее не могли быть переведены.

Просто используйте новый метод AsQueryable для работы с LINQ.

Обновление за 18 сентября:

Драйвер MongoDB 2.1 должен поддерживать его. См. https://jira.mongodb.org/browse/CSHARP-935

Наконец, вышел 2.1 rc. Отличная работа!

Старый ответ:

Нет, AsQueryable не поддерживается: https://jira.mongodb.org/browse/CSHARP-935

Тип: Эпический Статус: Открыто Приоритет: майор - P3 Разрешение: Неразрешенный

И из уст часового: Крейг Уилсон на форуме google

Да, в новом api нет AsQueryable. Вы можете отслеживать эту функцию здесь (https://jira.mongodb.org/browse/CSHARP-935). У нас просто не хватило времени, чтобы закончить и тщательно протестировать. Он запланирован на 2,1 и является для нас приоритетом. До тех пор мы интегрировали функции дерева выражений в методы Find и Aggregate (и некоторые из методов записи для фильтрации), так что вам может не понадобиться полная реализация LINQ. Например, см. Пример тестового класса здесь в качестве примера: https://github.com/mongodb/mongo-csharp-driver/blob/master/src/MongoDB.Driver.Tests/Samples/AggregationSample.cs#L77

Ответ 2

Я изначально использовал следующие версии mongocsharp версии 1.9x:

public IQueryable<T> SearchFor(Expression<Func<T, bool>> predicate)
{
    return _collection.AsQueryable<T>()
                      .Where(predicate.Compile()).AsQueryable();
}

Получил те же результаты в версии 2, используя:

public async Task<List<T>> SearchFor(Expression<Func<T, bool>> predicate)
{
    return await _collection.Find(Builders<T>.Filter.Where(predicate)).ToListAsync();
}

Надеюсь, что это поможет.