Этот вопрос касается запросов во вложенных словарях.
У меня есть случай, который можно упростить до следующей настройки со стилем, содержащим список SKU, содержащий список Collis.
ОПРЕДЕЛЕНИЯ КЛАССА:
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 В 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", содержащуюcolli с именем "Right")
var styleWithSpecificColli = session.Query<Style>().Where(s => s.Skus["Sku1"].Collis["Right"] != null).ToList();
Когда я пытаюсь выполнить последний запрос, я получаю сообщение:
{"Url": "/ indexes / dynamic / Styles? запрос = -Skus.get_Item (% 2522Sku1% 2522) .Collis.Right% 253A% 255b% 255BNULL_VALUE% 255D% 255D% 2520AND% 2520Skus.get_Item (% 2522Sku1% 2522) .Collis.Right% 253A * & начать = 0 & PAGESIZE =128 & aggregation = None "," Error ":" System.ArgumentException: поле ') CollisRight' не проиндексировано, не может запрашивать поля, которые не проиндексированы \ r \ n в Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes () в c: \ Builds \ raven \ Raven.Database \ Indexing \ Index.cs: строка 628 \ r \ n в Raven.Database.Indexing.Index.IndeNeQuery.) в c: \ Builds \ raven \ Raven.Database \ Indexing \ Index.cs: строка 542 \ r \ n в System.Linq.Enumerable.WhereSelectEnumerableIterator 2.MoveNext()\r\n
at
System.Linq.Enumerable.WhereSelectEnumerableIterator
2.MoveNext () \ r \ n в System.Collections.Generic.List 1.InsertRange(Int32 index,
IEnumerable
1 collection) \ r \ n at ........
Можно ли выполнить последний запрос?Может быть, определить, что индексировать в RavenDB?
Заранее спасибо.