2012-06-06 52 views
4

我正在使用C#的Mongo LINQ驅動程序,效果很好。Mongodb,linq驅動程序。如何構建包含變量或語句

排序了很多屬性,但繼承人一個問題,我無法解決,其可能很簡單。

var identifierList = new []{"10", "20", "30"}; 
var newList = list.Where(x => identifierList.Contains(x.Identifier)); 

This is NOT supported ... 

所以我可以做類似:

var newList = list.Where(x => x.Identifier == "10" || x.Identifier == "20" || x.Identifier == "30"); 

但由於列表是可變的...我怎麼構建上面?還是有更好的選擇?

list的是類型IQueryable<MyCustomClass>

有關信息......這被用作屬性的很多的過濾器的。在SQL中,我可以有一個父 - >子關係。但是,因爲我不能作爲主ID的父母,我需要把所有的ID都拿出來,然後像這樣構建它。

希望這是有道理的。如果需要,我會解釋更多。

+0

你想做什麼?找到列表是否包含另一個列表中的所有項目?上面的代碼(修復後)將使newList上的項目將成爲列表中的相同項目 – eyossi

+0

示例中的錯誤Ups只會修復:-) – Syska

+0

仍然...不清楚。試着用簡單的語言來解釋你想通過兩個列表操作來實現什麼。例如:我想複製identifierList到newList(我可以從上面的代碼中假設) – eyossi

回答

5

回答我自己的問題... Mongo Sharp LINQ驅動程序有一個名爲「In」的擴展方法,它正是我所需要的。

他們卻實現了它在1.5,所以我們可以用舊的方式,如:https://jira.mongodb.org/browse/CSHARP-462

var list = new []{"10", "10"}; 

search.Where(x => list.Contains(x.Id)); 

但1.5版包不上的NuGet呢。

但是,這應該與mongo-csharp驅動程序的特別驚喜帶來的「In」擴展一起使用。

search.Where(x => x.In(list)); 
+1

你的初始聲明應該已經工作了。它只是沒有在1.4.2中實現。 1.5將包含此功能。 https://jira.mongodb.org/browse/CSHARP-462 –

+0

是的,它應該有效,但由於我使用1.4.2版本而不是1.5版本,所以我將不得不使用最後一個版本。我發現LINQ提供者發現的大多數問題已經修復:-)。我確實希望他們能夠開始預發佈:-)。 – Syska

1
var identifierList = new []{"10", "20", "30"}; 
var newList = list.ToList().Where(x => identifierList.Contains(x.Identifier)); 

你只需要使用列表,而不是IEnumerable的(做,通過使用.ToList())

如果它不工作,請添加您的列表類型

+0

我想過濾列表。就像擺脫IQueryable 中沒有將Identifier屬性設置爲「10」,「20」或「30」的所有MyCustomClass。 – Syska

+0

Unsupported where子句:Enumerable.Contains (String []:{「10」,「20」,「30」},x.Identifier)。 – Syska

+0

你可以添加你的列表初始化和聲明嗎? – eyossi

相關問題