Mongodb C#FindAsync。使用linq

时间:2017-01-17 07:21:39

标签: c# mongodb linq mongodb-.net-driver

我有一个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为我做这些,所以我可能会遗漏一些非常基本的东西。

1 个答案:

答案 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