首页 > 解决方案 > c#中带有间隔和除法的MongoDB过滤器

问题描述

我在通过对集合类的属性执行除法来过滤间隔时遇到了一些麻烦。

代码 :

if(sPacketMSItem.DollerPerCarat.HasValue && sPacketMSItem.DollerPerCarat.Value > 0)
                filter = filter & Builders<Packet>.Filter.Gte(c => c.NetAmount / c.Weight, sPacketMSItem.DollerPerCarat - 30 )
                                                  & Builders<Packet>.Filter.Lte(c => c.NetAmount / c.Weight, sPacketMSItem.DollerPerCarat + 30);

但它给sPacketMSItem.DollerPerCarat了一些时间可以为空,所以这个查询不能过滤属性数据并给出执行。

例外:

Unable to determine the serialization information for c => Convert((c.NetAmount / c.Weight), Nullable`1).

我不明白为什么会这样。请给我一些解释。

注意: 我有复杂的查询。有 50 个像这样的 Builder 过滤器

filter = filter & Builders<Packet>.Filter.In(c => c.SerialNo, srNo);

另外过滤器是上一个(除一)。所以我很难做到这一点。如果您了解我的问题,请向我解释更多。

编辑 :

我已经创建了这种方式匹配

var group = new BsonDocument
                    {
                        {"_id", "$ID"}
                     };

var match = new BsonDocument("$match", new BsonDocument()
                        .Add("$and", new BsonArray()
                                .Add(new BsonDocument()
                                        .Add("$gte", new BsonArray()
                                                .Add(new BsonDocument()
                                                        .Add("$divide", new BsonArray()
                                                                .Add("$nA")
                                                                .Add("$wT")
                                                        )
                                                )
                                                .Add(1200.0)
                                        )
                                )
                                .Add(new BsonDocument()
                                        .Add("$lte", new BsonArray()
                                                .Add(new BsonDocument()
                                                        .Add("$divide", new BsonArray()
                                                                .Add("$nA")
                                                                .Add("$wT")
                                                        )
                                                )
                                                .Add(2400.0)
                                        )
                                )
                            ));


var pipeline = new[] { match };

现在像这样使用它

var abc = await packetCollection.AggregateAsync(pipeline, options).Group(group).Match(filter).ToListAsync();

它给了我以下错误。 错误 :

/Users/lalitdevani/Documents/AasthaSalesWebApi/Aastha/_git/Sales.WebApi/Biz.DAL/MongoRepositoriesCustom/SalesCRMRepository/MarketSheet/MarketSheetRepository.cs(54,54):错误CS0411:方法'IMongoCollection.AggregateAsync(PipelineDefinition)的类型参数, AggregateOptions, CancellationToken)' 不能从用法中推断出来。尝试明确指定类型参数。(CS0411) (Biz.DAL)

任何帮助将不胜感激。

标签: c#mongodbmongoosefilter

解决方案


推荐阅读