C# Can';t将所有Int32字段值相加

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

我有一个mongo db集合,里面有这样的文档

我只需要计算所有文档的“债务”字段的总和。但是我不知道怎么做。 官方文档似乎太模糊,根本没有帮助,因为根本没有关于如何使用C#driver 3.6的信息+

我偶然发现了这条线 并尝试使用
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]);