c# - 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)
任何帮助将不胜感激。
解决方案
推荐阅读
- android - 离子表单提交调用导航到而不是提交函数
- docker - 在 db2 LuW Docker 容器中持久化数据
- regex - 需要解释 Octave 中的表达式 '<[^<>]+>'
- c++ - std::function 作为关联容器中的键
- r - 将字符更改为不同格式的日期(Win 和 Mac)
- ios - iOS:如果宽度或高度为 1px,则无法以 HEIC 格式保存图像
- java - 如何使用 Quarkus 托管自定义 Netty 编解码器?
- javascript - Javascript:使数组值成为新数组的键
- coq - 如何在 Coq 中实现开放式公式?
- c++ - c++字符串从文件读取到向量字符串