2017-01-17 26 views
1

我有一個mongodb,我想過濾一個列表中的值在我的文檔中。Mongodb C#FindAsync。使用linq過濾文檔內的列表

我的文件看起來是這樣的:

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

我想找到一個文檔,其中「東西」裏面的「MYLIST」是「一個」在FindAsync方法使用LINQ表達式。

我迄今爲止最好的努力:

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

不幸的是C#不接受這種說法,我收到以下錯誤:

無法隱式轉換類型「System.Collections.Generic.IEnumerable 「to」bool「

無法將lambda表達式轉換爲預期的委託類型,因爲塊中的某些返回類型不會隱式轉換爲委託返回類型」

我對linq比較陌生,主要是使用resharper來爲我做它們,所以我可能在這裏錯過了一些非常基本的東西。

回答

1

對不起,我錯誤理解了你的問題,你應該用Any替換Where(它給你傳遞給你表達式的項目的集合),如果該表達式的集合中有任何項目爲真,則返回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

偉大啊!謝謝! – jimmy

+0

歡迎您:) –