我有一个mongodb,我想过滤我文档中列表中的值。
我的文档看起来像这样:
{"_id": "guid" , "mylist": {"stuff": "a", "morestuff": "b"} }
我想通过在FindAsync方法中使用linq表达式找到一个文档,其中“mylist”中的“stuff”是“a”。
到目前为止我的最大努力:
collection.FindAsync(item => item.mylist.Where(item2 => item2.stuff == "a") )
不幸的是,C#不接受此声明,我收到以下错误:
无法将类型“System.Collections.Generic.IEnumerable”隐式转换为“bool”
无法将lambda表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型“
我对linq比较陌生,并且大部分都在使用resharper为我做这些,所以我可能会遗漏一些非常基本的东西。
答案 0 :(得分:1)
抱歉,我误解了你的问题,你应该用Where
替换Any
(这会给你传递给你表达的项目的集合)collection.FindAsync(Builders<YourClass>.Filter.ElemMatch(
f=>f.mylist, item2=>item2.stuff=="a"))
如果集合中有任何项目,则返回true那个表达是真的。
使用以下查询:
collection.FindAsync(x=>x.mylist.Any(b=>b.stuff=="a"))
我认为,这个也会奏效:
node = doc.at_css("p.pubdate.online")
node.content = self.send("#{article_type}_released_at").strftime("%B %d, %Y")
doc.to_html