Mongodb C # FindAsync. Фильтр по списку внутри документа с использованием linq

2

У меня есть mongodb, и я хочу фильтровать значение внутри списка в моих документах.

Мои документы выглядят примерно так:

{"_id": "guid" , "mylist": {"stuff": "a", "morestuff": "b"} }

Я хотел бы найти документ, в котором "stuff" внутри "mylist" является "a", используя выражения linq в методе FindAsync.

Мои лучшие усилия:

collection.FindAsync(item => item.mylist.Where(item2 => item2.stuff == "a") )

К сожалению, С# не примет этот оператор, и я получаю следующие ошибки:

Невозможно неявно преобразовать тип "System.Collections.Generic.IEnumerable" в "bool"

Невозможно преобразовать лямбда-выражение в предполагаемый тип делегата, потому что некоторые типы возвращаемых данных в блоке неявно не конвертируются в тип возвращаемого делегата "

Я относительно новичок в linq и в основном использовал resharper, чтобы сделать их для меня, поэтому, вероятно, я, вероятно, пропустил что-то очень основное.

Теги:
linq
mongodb-.net-driver

1 ответ

1
Лучший ответ

Извините, я неправильно понял ваш вопрос, вам просто нужно заменить Where (что дает вам набор элементов, которые передаются вашему выражению) с Any который возвращает true, если в коллекции есть какой-либо элемент, для которого это выражение истинно.

Используйте следующий запрос:

collection.FindAsync(Builders<YourClass>.Filter.ElemMatch(
                                     f=>f.mylist, item2=>item2.stuff=="a"))

Я думаю, этот тоже будет работать:

collection.FindAsync(x=>x.mylist.Any(b=>b.stuff=="a"))
  • 0
    Ах, здорово! Спасибо!
  • 0
    пожалуйста :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню