В настоящее время я играю с граненым поиском после прочтения RavenDB doc об этом.
Возвращенный результат в порядке, но есть небольшая проблема. Так как результат приходит как
IDictionary<string, IEnumerable<FacetValue>>
необходимо выполнить итерацию по нему и выполнить некоторые необычные манипуляции со строками, чтобы отформатировать результат и показать его в PartialView. Более конкретно этот аспект:
new Facet
{
Name = "Value_Range",
Mode = FacetMode.Ranges,
Ranges =
{
"[NULL TO Dx500.0]",
"[Dx500.0 TO Dx1000.0]",
"[Dx1000.0 TO Dx2500.0]",
"[Dx2500.0 TO Dx5000.0]",
"[Dx5000.0 TO NULL]",
}
}
View
код:
@fv.Range
Это строка " beautiful ", которая выводится на представление: [Dx400.0 TO Dx600.0]
RavenDB использует префикс Dx выше для преобразования числа в строку .
Controller
код, где фасетный результат передается определенному ViewModel
:
var facetResults = DocumentSession.Query<Realty>("RealtyFacets")
//.Where(x => x.Value >= 100 && x.Value <= 1000)
.ToFacets("facets/RealtyFacets").ToArray();
var model = new RealtyFacetsViewModel();
model.Cities = facetResults[0];
model.Purposes = facetResults[1];
model.Types = facetResults[2];
model.Values = facetResults[3];
return PartialView("RealtyFacets", model);
Есть ли какой-либо другой / лучший способ получения результатов из многогранного поиска, чтобы не нужно было обрабатывать строки для форматирования возвращаемых данных?
После предложения Айенде я сделал это в своем контроллере:
foreach (var val in facetResults[3].Value)
{
switch(val.Range)
{
case "[Dx0.0 TO Dx200.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
0, @Localization.to, 200);
break;
case "[Dx200.0 TO Dx400.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
200, @Localization.to, 400);
break;
case "[Dx400.0 TO Dx600.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
400, @Localization.to, 600);
break;
case "[Dx600.0 TO Dx800.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
600, @Localization.to, 800);
break;
case "[Dx800.0 TO Dx1000000.0]":
val.Range = string.Format("{0:C2} {1} {2:C2}",
800, @Localization.to, 1000000);
break;
}
}
model.Values = facetResults[3];