C# Can';t将所有Int32字段值相加
我有一个mongo db集合,里面有这样的文档 我只需要计算所有文档的“债务”字段的总和。但是我不知道怎么做。 官方文档似乎太模糊,根本没有帮助,因为根本没有关于如何使用C#driver 3.6的信息+ 我偶然发现了这条线 并尝试使用C# Can';t将所有Int32字段值相加,c#,mongodb,mongodb-.net-driver,C#,Mongodb,Mongodb .net Driver,我有一个mongo db集合,里面有这样的文档 我只需要计算所有文档的“债务”字段的总和。但是我不知道怎么做。 官方文档似乎太模糊,根本没有帮助,因为根本没有关于如何使用C#driver 3.6的信息+ 我偶然发现了这条线 并尝试使用Sum()的方法,如下所示: var result = m_Counterparties.AsQueryable() .Where(x => !x[CounterpartyFields.ID].Equals(ObjectId.E
Sum()
的方法,如下所示:
var result = m_Counterparties.AsQueryable()
.Where(x => !x[CounterpartyFields.ID].Equals(ObjectId.Empty))
.Sum(x => x[CounterpartyFields.DEBT].AsInt32);
WriteLine(result);
结果我总是得到0,但你可以看到它必须至少是100,所以这里的问题是MongoDB C#driver需要将lambda表达式转换为聚合。您可以运行一个脚本来观察它是如何被翻译的。因此,您的代码需要:
x => x[CounterpartyFields.DEBT].AsInt32
翻译成:
{
"$group" : {
"_id" : 1,
"__result" : {
"$sum" : "$debt.AsInt32"
}
}
}
这不是你想要的
要解决此问题,您应该摆脱AsInt32,并使其可编译,您可以使用以下代码:
.Sum(x => (int)x[CounterpartyFields.DEBT]);