2016-08-29 51 views
0

我使用LINQ使在documentdb集合其中包括項目有兩個單獨的陣列一樣的查詢:文檔DB LINQ查詢,之後的SelectMany的SelectMany

{ 
name: "Family 1", 
cars: ["Toyota", "Honda"], 
pets: ["Cat", "Dog"] 
} 

比方說,我想找到家人豐田,我會用這樣的一個查詢:

var families = Client.CreateDocumentQuery<T>(dLink) 
    .SelectMany(f => f.Cars 
       .Where(car=> car == "Toyota") 
       .Select(car => f)); 

這工作得很好。當檢查生成的SQL查詢它看起來也如預期:

SELECT VALUE root FROM root JOIN car IN root[\"Cars\"] WHERE (car= \"OU=Brugere\") 

如果我想找到一個豐田和狗所有的家庭,我會希望能夠使用一個查詢,看起來是這樣的:

var families = Client.CreateDocumentQuery<T>(dLink) 
    .SelectMany(f => f.Cars 
       .Where(car=> car == "Toyota") 
       .Select(car => f)) 
    .SelectMany(f => f.Pets 
       .Where(pet => pet == "Dog") 
       .Select(pet => f)); 

這失敗,一個神祕的錯誤消息:

{"errors":[{"severity":"Error","location":{"start":109,"end":111},"code":"SC2001","message":"Identifier 'pet' could not be resolved."}]} 

在視察生成的SQL查詢,它看起來並不如預期:

SELECT VALUE root FROM root JOIN car IN root[\"Cars\"] WHERE ((car= \"Toyota\") AND (pet = \"Dog\")) "} 

這使得顯而易見的,爲什麼「寵物」不能得到解決,它缺少在根加入了寵物[\「寵物」]

如何使兩種不同的通過LINQ連接在documentdb?

回答

0

鑑於來自toString()的SQL輸出,看起來LINQ提供程序中存在一個錯誤。我們將解決問題。

在此期間,我建議發出查詢的SQL查詢:

SELECT * 
FROM c 
WHERE ARRAY_CONTAINS(c.cars, "Toyota") 
     AND ARRAY_CONTAINS(c.pets, "Cat")