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

如何在C# Dictionary中校验用户与服务绑定的重复值以符合业务规则

正确实现方案

你需求里唯一的禁止规则是同一用户不能重复绑定同一个服务,其余场景均为合法,原有代码冗余多、逻辑偏离需求,可直接按如下逻辑实现:

// 收集所有有效的用户ID
var validUserIds = new List<string>
{
    data.jMBG,
    data.secondPersonJMBG,
    data.thirdPersonJMBG,
    data.fourthPersonJMBG,
    data.fifthPersonJMBG
}.Where(x => !string.IsNullOrEmpty(x)).ToList();

// 构造<用户ID,服务ID>的绑定对列表
var bindingPairs = new List<(string UserId, int ServiceId)>();
if (data?.Schedules != null)
{
    // 取用户数和排班数的较小值遍历,避免索引越界
    var maxLoopCount = Math.Min(validUserIds.Count, data.Schedules.Count);
    for (int i = 0; i < maxLoopCount; i++)
    {
        var service = data.Schedules[i]?.Service;
        if (service != null && service.Id > 0)
        {
            bindingPairs.Add((validUserIds[i], service.Id));
        }
    }
}

// 核心校验:判断是否存在同一用户绑定同一服务多次的情况
bool isInvalid = bindingPairs
    .GroupBy(x => new { x.UserId, x.ServiceId })
    .Any(group => group.Count() > 1);

if (isInvalid)
{
    // 提示存在同一用户重复绑定同服务,无法继续
}
else
{
    // 校验通过,继续流程
}

逻辑说明

上述实现完全匹配你给出的4条业务规则:

  • 不同用户绑定不同服务:分组后每组仅1条数据,判定合法
  • 不同用户绑定相同服务:分组的用户ID不同,属于不同分组,每组仅1条数据,判定合法
  • 同一用户绑定相同服务:分组的用户ID和服务ID完全一致,组内条数大于1,判定非法
  • 同一用户绑定不同服务:分组的服务ID不同,属于不同分组,每组仅1条数据,判定合法

同时规避了原有代码的问题:无需给用户ID加前缀、不需要多余的多用户同服务校验、避免了两个列表Zip合并时长度不一致导致的对应错位问题。

内容的提问来源于stack exchange,提问作者lonelydev101

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:57:04