У меня проблемы с получением карты / сокращением операции до работы. Я увлекаюсь C #, поэтому, вероятно, отчасти из-за отсутствия у меня опыта работы с lambda и linq для тщательного анализа и понимания причины (что такое выражение создания объекта), приводящей к ошибке.
Код компилируется отлично, но при выполнении он выдает исключение, и я не понимаю, какая часть не верна.
Когда я отключаю операцию уменьшения, ошибка остается, поэтому я предполагаю, что это связано с
часть карты.
Версия RavenDB: RavenDB-Build-573
Это исключение: System.InvalidOperationException: Variable
выбор инициализатора должен иметь лямбда-выражение с объектом create
выражение
И я предоставляю RavenDB такой индекс:
IndexCreation.CreateIndexes(typeof(FullTree).Assembly, store);
Объект Entity - это простой класс, имеющий int Id и int ParentId.
Это карта / уменьшенная часть:
public class FullTreeObject
{
public int Id { get; set; }
public int Count { get; set; }
public int ParentId { get; set; }
}
public class FullTree : AbstractIndexCreationTask<Entity,FullTreeObject>
{
public FullTree()
{
Map = entities => from entity in entities
let ids = new object[]
{
new { entity.Id, Count = 0,
entity.ParentId },
new { Id = entity.ParentId, Count
= 1, ParentId = (string)null}
}
from id in ids
select id;
Reduce = results => from result in results
group result by result.Id into g
let parent = g.FirstOrDefault(x =>
x.ParentId != null)
select new
{
Id = g.Key,
Count = g.Sum(x => x.Count),
ParentId = parent ==
(object)null ? (object)null : parent.ParentId
};
}
}
Надеюсь, кто-нибудь может дать мне некоторые подсказки. Заранее спасибо.
-
В ответ на ввод я модифицировал карту / уменьшить реализацию. RavenDB требует отображения и уменьшения вывода того же типа, но, честно говоря, это не может быть правильным, так как я выводю значения объекта-сущности, а не те, которые получены в массиве. Но я не могу достичь этих значений с помощью intellisense.
Индекс создается в студии RavenDB, но результаты не возвращаются, поэтому я могу предположить, что моя реализация ошибочна.
public class FullTree : AbstractIndexCreationTask<Entity,FullTreeObject>
{
public FullTree()
{
Map = entities => from entity in entities
let ids = new object[]
{
new { entity.Id, Count = 0, entity.ParentId },
new { Id = entity.ParentId, Count = 1, ParentId = (string)null}
}
from id in ids
select new {
entity.Id,
Count = 1,
entity.ParentId
};
Reduce = results => from result in results
group result by result.Id into g
let parent = g.FirstOrDefault(x => x.ParentId != null)
select new
{
Id = g.Key,
Count = g.Sum(x => x.Count),
ParentId = parent == (object)null ? (object)null : parent.ParentId
};
}
}
Обновление в сборке 601:
public class FullTree : AbstractIndexCreationTask<Entity, FullTree.ReduceResult>
{
public class ReduceResult
{
public int Id { get; set; }
public int Count { get; set; }
public int ParentId { get; set; }
}
public FullTree()
{
Map = entities => from entity in entities
let items = new[]
{
new { Id = (int) entity.Id, Count = (int) 0, ParentId = (int) entity.ParentId },
new { Id = (int) entity.ParentId, Count = (int) 1, ParentId = (int) 0}
}
from item in items
select new {
Id = item.Id,
Count = item.Count,
ParentId = item.ParentId
};
Reduce = results => from result in results
group result by result.Id into g
let itemWithParent = g.FirstOrDefault(x => x.ParentId != 0)
select new
{
Id = g.Key,
Count = g.Sum(x => x.Count),
ParentId = (itemWithParent == null) ? (int)0 : itemWithParent.ParentId
};
}
}
Ошибка вернулась:
[WebException: удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера.]
System.Net.HttpWebRequest.GetResponse () +6111651
Raven.Client.Connection.HttpJsonRequest.ReadStringInternal (Func`1 getResponse) в c: \ Builds \ raven \ Raven.Client.Lightweight \ Connection \ HttpJsonRequest.cs: 231
[InvalidOperationException: {
"Url": "/ indexes / FullTree",
«Ошибка»: «System.InvalidOperationException: не удалось понять запрос: \ r \ n-- строка 2, столбец 55: недопустимое выражение NewExpression \ r \ n-- строка 2, столбец 91: невозможно проанализировать значение типа double .0.0 \ r \ n- - строка 2 столбец 183: невозможно разобрать double .0.0 \ r \ n-- строка 2 столбец 275: невозможно разобрать double .0.0 \ r \ n \ r \ n в Raven.Database.Linq.QueryParsingUtils.GetVariableDeclarationForLinqMethods ( Строковый запрос, Boolean требуетSelectNewAnonymousType) в c: \ Builds \ raven-unstable \ Raven.Database \ Linq \ QueryParsingUtils.cs: строка 122 \ r \ n в Raven.Database.Linq.DynamicViewCompiler.TransformMapDefinitionFromLinqMethodSamering String query, String, String, String c: \ Builds \ raven-unstable \ Raven.Database \ Linq \ DynamicViewCompiler.cs: строка 355 \ r \ n в Raven.Database.Linq.DynamicViewCompiler.HandleMapFunction (ConstructorDeclaration ctor, String map) в c: \ Builds \ raven- unstable \ Raven.Database \ Linq \ DynamicViewCompiler.cs: строка 132 \ r \ n в Raven.Database.Linq.DynamicViewCompiler.TransformQueryToClass () в c: \ Builds \ raven-unstable \ Raven.Database \ Linq \ DynamicViewC ompiler.cs: строка 97 \ r \ n в Raven.Database.Linq.DynamicViewCompiler.GenerateInstance () в c: \ Builds \ raven-unstable \ Raven.Database \ Linq \ DynamicViewCompiler.cs: строка 489 \ r \ n в Raven .Database.DocumentDatabase.PutIndex (имя строки, определение IndexDefinition) в c: \ Builds \ raven-unstable \ Raven.Database \ DocumentDatabase.cs: строка 717 \ r \ n в Raven.Database.Server.Responders.Index.Put ( IHttpContext context, String index) в c: \ Builds \ raven-unstable \ Raven.Database \ Server \ Responders \ Index.cs: строка 72 \ r \ n в Raven.Database.Server.Responders.Index.Respond (контекст IHttpContext) в c: \ Builds \ raven-unstable \ Raven.Database \ Server \ Responders \ Index.cs: строка 49 \ r \ n в Raven.Database.Server.HttpServer.DispatchRequest (IHttpContext ctx) в c: \ Builds \ raven- unstable \ Raven.Database \ Server \ HttpServer.cs: строка 527 \ r \ n в Raven.Database.Server.HttpServer.HandleActualRequest (IHttpContext ctx) в каталоге c: \ Builds \ raven-unstable \ Raven.Database \ Server \ HttpServer. CS: линия 303 "
}]Raven.Client.Connection.HttpJsonRequest.ReadStringInternal (Func`1 getResponse) в c: \ Builds \ raven \ Raven.Client.Lightweight \ Connection \ HttpJsonRequest.cs: 295