У меня есть 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, чтобы сделать их для меня, поэтому, вероятно, я, вероятно, пропустил что-то очень основное.
Извините, я неправильно понял ваш вопрос, вам просто нужно заменить 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"))