使用LINQ在文档中过滤列表:Mongodb C# FindAsync。

3

我有一个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个回答

2
抱歉,我误解了您的问题,您只需要用Any替换Where(它会给您提供通过表达式的项目集合),Any会在集合中有任何一个表达式为true时返回true。
使用以下查询:
collection.FindAsync(Builders<YourClass>.Filter.ElemMatch(
                                     f=>f.mylist, item2=>item2.stuff=="a"))

我认为,这个也可以起作用:
collection.FindAsync(x=>x.mylist.Any(b=>b.stuff=="a"))

啊,太好了!谢谢你! - jimmy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接