此問題關於查詢嵌套字典。查詢RavenDB中的嵌套字典
我有一種情況,可以簡化爲以下設置,其樣式包含包含Collis列表的SKU列表。
類定義:
public class Style
{
public string Name { get; set; }
public Dictionary<string, Sku> Skus = new Dictionary<string, Sku>();
}
public class Sku
{
public string Name { get; set; }
public Dictionary<string, Colli> Collis = new Dictionary<string, Colli>();
}
public class Colli
{
public string Name { get; set; }
}
JSON DATA IN RAVEN DB:
{
"Skus": {
"Sku1": {
"Collis": {
"Right": {
"Name": "Right"
},
"Right again": {
"Name": "Right again"
},
"Wrong": {
"Name": "Wrong"
}
},
"Name": "Sku1"
},
"Sku2": {
"Collis": {
"Wrong 1": {
"Name": "Wrong 1"
},
"Wrong 2": {
"Name": "Wrong 2"
},
"Wrong 3": {
"Name": "Wrong 3"
}
},
"Name": "Sku2"
}
},
"Name": "Style1"
}
有效查詢的:
(詢問風格的具體名稱的單品)
var existingStyleWithSku1 = session.Query<Style>().Where(s => s.Skus["Sku1"] != null).ToList();
var nonexistingStyleWithSku4 = session.Query<Style>().Where(s => s.Skus["Sku4"] != null).ToList();
無效嵌套查詢
(請包含一個名爲「SKU1」 SKU包含一個名爲科利「右」的風格)
var styleWithSpecificColli = session.Query<Style>().Where(s => s.Skus["Sku1"].Collis["Right"] != null).ToList();
當我嘗試執行最後一個查詢,我得到的消息:
{ 「URL」: 「/indexes/dynamic/Styles?query=-Skus.get_It em%(%2522Sku1%2522).Collis.Right%253A%255B%255BNULL_VALUE%255D%255D%2520AND%2520Skus.get_Item(%2522Sku1%2522).Collis.Right%253A * & start = 0 & pageSize = 128 & aggregation = None「, 」錯誤「:」System.ArgumentException:該字段')CollisRight'不是 已編制索引,無法查詢未索引的字段\ r \ n在 Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes () in c:\ Builds \ raven \ Raven.Database \ Indexing \ Index.cs:line 628 \ r \ n at Raven.Database.Indexing.Index.IndexQueryOperation.d__1c.MoveNext() in c:\ Builds \ raven \ Raven.Database \ Indexing \ Index.cs:line 542 \ r \ n at System.Linq.E numerable.WhereSelectEnumerableIterator
2.MoveNext()\r\n at System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext(個)\ r \ n 在System.Collections.Generic.List1.InsertRange(Int32 index, IEnumerable
1集)\ r \ n在 ........
是否有辦法我可以執行最後一個查詢?也許定義在RavenDB中索引什麼?
提前謝謝。
我解決了這個問題。我將Skus和Colli集合類型從字典更改爲本地陣列。 這樣我可以使用這個查詢:「Skus,Collies,Name:Right」。 如果有人知道如何使用字典來解決問題,我非常希望聽到它:) –
Stephan, 請在郵件列表中發佈此作爲失敗的測試 –