2016-03-16 51 views
0

我正在使用linqjs和我有一個數組充滿ids包含在一個列表和一個數組完整的複雜對象,其中有一個屬性userIdlinqjs intersect比較問題

問題是當我做一個十字路口時,它似乎不會返回任何東西,但是圍繞compareSelector的信息很少。

所以這裏是我在做什麼的例子:

enumerableOfUsers.intersect(listOfIdsToInclude, "$.userId"); 

所以在上面的例子中enumerableOfUsers將現有的枚舉從用戶的數組(其中包含userId場)創建,該listOfIdsToInclude是一系列的id值,如["12345", "213213", "2124"]

交叉似乎工作,但從來沒有返回任何東西,我知道userIds匹配,所以我在這裏做任何錯誤?

回答

1

事情是比較選擇器應用於第一和第二組的項目。第二組是一個ID列表,所以比較選擇器不適用。該投影產生undefined值,這將始終導致找不到結果。

您需要將選擇器僅應用於第一組值。試試這個:

// using linqjs 2.x syntax 
var query = enumerableOfUsers.Select("$.userId").Intersect(listOfIdsToInclude); 
+0

啊確定的輝煌是有一定道理,但是這是否意味着相交後,我失去了用戶對象的其餘部分,還有沒有其他的方法,它能夠保持整個用戶對象的範圍查詢,以便我可以將它們退回另一端?我基本上使用這個像'where(x => x.userId in listOfIdsToInclude)''也許我可以做一個indexOf或其他東西,而不是一個相交。無論如何,你會得到答案,因爲這提供了所需的信息。 – Grofit

+0

在這種情況下,我會使用連接。另一方面,可以通過使用'collection.Contains(value)'來實現等價於集合中的where值。但是,您將無法在lambda字符串中表示該內容。 –