MongoDB фильтр с интервалом и делением в c # - PullRequest
0 голосов
/ 18 декабря 2018

У меня возникли проблемы с фильтрацией интервала с делением на свойства класса коллекции.

Код:

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)

Любая помощь будет оценена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...