У меня возникли проблемы с фильтрацией интервала с делением на свойства класса коллекции.
Код:
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();
выдает следующую ошибку. ОШИБКА:
/ Пользователи / lalitdevani / Документы / AasthaSalesWebApi / Aastha / _git / Sales.WebApi / Biz.DAL / MongoRepositoriesCustom / SalesCRMRepository / MarketSheet / MarketSheetRepository.cs (54,54): Ошибка CS0411: аргументы типа для метода 'IMongoCollection.AggregateAsync (PipelineDefinition, AggregateOptions, CancellationToken)' не могут быть выведены из использования.Попробуйте указать аргументы типа явно.(CS0411) (Biz.DAL)
Любая помощь будет оценена.