ASP.NET MVC Core中MongoDB颜色显示条件逻辑咨询及代码解读
代码功能与逻辑解读
先简化原代码的冗余部分:
原代码中的true && color.isManufactured == true等价于color.isManufactured == true,false && color.replenishmentLeadTime != null永远为false可直接忽略,因此原条件可简化为:
IsOutOfStock = ((color.quantityAvailable.value < product.OrderMinimumQuantity && !color.isBuyToOrder) || color.isManufactured) ? false : true;
进一步转换逻辑,等价于:
IsOutOfStock = !((color.quantityAvailable.value < product.OrderMinimumQuantity && !color.isBuyToOrder) || color.isManufactured);
运行逻辑说明:
- 当满足**「库存数量小于订单最小量且不支持按需采购」,或者「该颜色为定制生产」**时,
IsOutOfStock赋值为false(代表可订购/有货) - 其他所有情况,
IsOutOfStock赋值为true(代表缺货/不可订购)
ASP.NET MVC Core + MongoDB 实现方案
1. 定义对应实体类
先定义与MongoDB集合匹配的实体(根据实际业务调整字段):
using MongoDB.Bson; using MongoDB.Bson.Serialization.Attributes; public class ColorOption { [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } public string ColorName { get; set; } public int QuantityAvailable { get; set; } public bool IsBuyToOrder { get; set; } public bool IsManufactured { get; set; } // 可添加产品关联ID,比如ProductId } public class Product { [BsonId] [BsonRepresentation(BsonType.ObjectId)] public string Id { get; set; } public int OrderMinimumQuantity { get; set; } // 其他产品属性 }
2. 实现筛选与状态计算
在服务类或控制器中,从MongoDB获取数据并计算颜色的启用状态:
using MongoDB.Driver; // 假设已通过依赖注入获取IMongoClient private readonly IMongoCollection<ColorOption> _colorCollection; private readonly IMongoCollection<Product> _productCollection; public ColorService(IMongoClient mongoClient) { var database = mongoClient.GetDatabase("YourDatabaseName"); _colorCollection = database.GetCollection<ColorOption>("ColorOptions"); _productCollection = database.GetCollection<Product>("Products"); } public async Task<List<ColorEnabledDto>> GetEnabledColors(string productId) { // 获取目标产品的最小起订量 var product = await _productCollection.Find(p => p.Id == productId).FirstOrDefaultAsync(); if (product == null) throw new ArgumentException("产品不存在"); // 查询所有关联该产品的颜色选项(可根据实际添加过滤条件,比如按ProductId筛选) var colors = await _colorCollection.Find(Builders<ColorOption>.Filter.Empty).ToListAsync(); // 计算每个颜色的启用状态 return colors.Select(color => new ColorEnabledDto { Id = color.Id, ColorName = color.ColorName, Enabled = (color.QuantityAvailable < product.OrderMinimumQuantity && !color.IsBuyToOrder && color.IsManufactured) || color.QuantityAvailable > product.OrderMinimumQuantity }).ToList(); } // 定义DTO用于传递到视图 public class ColorEnabledDto { public string Id { get; set; } public string ColorName { get; set; } public bool Enabled { get; set; } }
3. 视图层使用状态控制
在MVC视图中,根据Enabled字段控制颜色选项的启用/禁用:
@model IEnumerable<YourNamespace.ColorEnabledDto> <div class="color-options"> @foreach (var color in Model) { <div class="color-item"> <label> <input type="radio" name="SelectedColor" value="@color.Id" @(!color.Enabled ? "disabled" : "") /> <span class="color-label">@color.ColorName</span> </label> </div> } </div>
内容的提问来源于stack exchange,提问作者surabhi organtiwar
相关产品推荐
相关产品推荐

