You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 04:52:10