这个问题涉及查询嵌套词典 .
我有一个案例可以简化为以下设置,其中包含一个包含Collis列表的SKU列表 .
CLASS DEFINITIONS:
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"
}
VALID QUERIES:
(询问带有特定名称skus的样式)
var existingStyleWithSku1 = session.Query<Style>().Where(s => s.Skus["Sku1"] != null).ToList();
var nonexistingStyleWithSku4 = session.Query<Style>().Where(s => s.Skus["Sku4"] != null).ToList();
INVALID NESTED QUERY
(询问包含名为“Sku1”的sku的样式,其中包含名为“Right”的colli)
var styleWithSpecificColli = session.Query<Style>().Where(s => s.Skus["Sku1"].Collis["Right"] != null).ToList();
当我尝试执行最后一个查询时,我收到消息:
{“Url”:“/ index / dynamic / Styles?query = -Skus.get_Item(%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 at在Raven.Database.Indexing.Index.IndexQueryOperation.d__1c的c:\ Builds \ raven \ Raven.Database \ Indexing \ Index.cs中的Raven.Database.Indexing.Index.IndexQueryOperation.AssertQueryDoesNotContainFieldsThatAreNotIndexes():第628行\ r \ n . 在System.Linq.Enumerable的System.Linq.Enumerable.WhereSelectEnumerableIterator2.MoveNext()\ r \ n中的C:\ Builds \ raven \ Raven.Database \ Indexing \ Index.cs中的MoveNext():第542行\ r \ n . WhereSelectEnumerableIterator2.MoveNext()\ r \ n在System.Collections.Generic.List1.InsertRange(Int32索引,IEnumerable1集合)\ r \ n at ........
有没有办法让我能够执行最后一个查询?也许定义在RavenDB中索引什么?
先感谢您 .
1 回答
我将上面的示例发布为测试失败,但是synhershko更正了我的代码以使其正常工作 .
实际上可以这样做 . 查询看起来像这样:
WRONG:
RIGHT: