Как вставить лямбда-выражение в качестве параметра в метод mongodb 'collection.find'? - PullRequest
2 голосов
/ 15 марта 2020

Я новичок в лямбда-выражениях и делегатах. Я точно не знаю, как их использовать. Итак, у меня есть метод, которому я хочу передать параметр лямбда-выражения как таковой (x: x.name == "testName"), чтобы я мог получить записи Mongodb, в которых в качестве имени указано "testname".

public List<BaseModel> get(*lambda expression here*)
    {


        List<User> users = Database.userCollectionObjs.Find(*lambda expression here*).ToList();
        List<BaseModel> baseModels = new List<BaseModel>();
        foreach (User user in users)
        {

            baseModels.Add(user);
        }

        return baseModels;

    }

очевидно, если я делаю это так:

        List<User> users = Database.userCollectionObjs.Find(user => user.name == "testuser").ToList();

, это работает. но как передать это выражение в качестве параметра моему get (), а затем вставить его в userCollectionOb js .Find

1 Ответ

2 голосов
/ 15 марта 2020

То, что Find метод расширения определен как

public static IFindFluent<TDocument, TDocument> Find<TDocument>(
    this IMongoCollection<TDocument> collection,
    Expression<Func<TDocument, bool>> filter, //<-- NOTE THE FILTER
    FindOptions options = null
)

Обратите внимание на тип параметра filter.

You потребуется передать соответствующий фильтр для вашей коллекции.

Если предположить, что userCollectionObjs содержит User, тогда get() будет выглядеть примерно так:

public List<BaseModel> get(Expression<Func<User, bool>> filter) {
    List<User> users = Database.userCollectionObjs.Find(filter).ToList();
    List<BaseModel> baseModels = new List<BaseModel>();
    foreach (User user in users) {
        baseModels.Add(user);
    }
    return baseModels;
}

Это позволит разрешить вызов get функция по желанию

List<BaseModel> baseModels = myClass.get(user => user.name == "testuser");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...