Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net RavenDB:如何进行简单的映射/减少聚合_.net_Linq_Ravendb - Fatal编程技术网

.net RavenDB:如何进行简单的映射/减少聚合

.net RavenDB:如何进行简单的映射/减少聚合,.net,linq,ravendb,.net,Linq,Ravendb,确定给定一组文档,如下所示: { "Name": "A", "Price": 1.50 } { "Name":"B", "Price":4 } { "Name":"A", "Price":10 } {"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1} 如何对列表中的价格执行简单的聚合?我不想执行任何分组,只是一个

确定给定一组文档,如下所示:

{ 
  "Name": "A",
  "Price": 1.50
}
{
    "Name":"B",
    "Price":4
}
{
    "Name":"A",
    "Price":10
}
{"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1}
如何对列表中的价格执行简单的聚合?我不想执行任何分组,只是一个简单的标量结果

即总和、平均值等

我尝试了以下两种方法,但均未成功:

仅地图:

地图:

减少:


这是我想到的

地图:

减少:

from result in results 
group result by result.Name 
into g 
select new { Name = g.Key, Price = g.Sum(x => x.Price) }
select new
{
    Name = g.Key,
    Total = g.Sum(x => (double)x.Total)
}
然而,只有当我把价格改成整数时,我才能让它工作。因此,我的两个文档如下所示:

{ 
  "Name": "A",
  "Price": 1.50
}
{
    "Name":"B",
    "Price":4
}
{
    "Name":"A",
    "Price":10
}
{"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1}
我的JSON输出如下所示:

{ 
  "Name": "A",
  "Price": 1.50
}
{
    "Name":"B",
    "Price":4
}
{
    "Name":"A",
    "Price":10
}
{"Results":[{"Name":"Total","Price":"14","Price_Range":"14"}],"IsStale":false,"TotalResults":1}

显然,将价格更改为整数并不是解决方案。这可能是RavenDB中的一个bug,但我自己对它很陌生,所以我希望这只是我执行
Sum()
的方式,或者是文档中表示数据的方式

这应该能奏效

地图:

减少:

from result in results 
group result by result.Name 
into g 
select new { Name = g.Key, Price = g.Sum(x => x.Price) }
select new
{
    Name = g.Key,
    Total = g.Sum(x => (double)x.Total)
}
每个文档都经过映射,聚合在Reduce中进行。但是映射出来的模式仍然需要与您的结果相匹配。每个文档的“总数”只是它的价格。所有这些都可以在reduce中求和

Name属性有点没用,它只是提供reduce属性来对每个文档进行分组