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

C#中按多条件筛选集合数据并分别存入对应列表的求助

按独立条件筛选Ransaktion记录到对应集合的实现方案

需要从ransaktionList集合中分别提取满足以下条件的记录,存入对应的SearchList:

  • 满足IsFailedServerValidation() → 存入SerialNumValDisplayList
  • 满足IsFailedDuplicatePatientValidation() → 存入DuplicateDisplayList
  • 满足IsFaliedPatientAddressValidation() → 存入PatAdressDisplayList

原代码使用连续的continue语句导致只有同时满足三个条件的记录才会被保留,且错误地将同一个记录添加到所有三个列表,无法实现独立筛选的需求。

原代码

foreach (Ransaktion ransaktion in ransaktionList)
{
    String link = RegistrationStart.Uri(ransaktion.Id);
    if (!String.IsNullOrEmpty(ransaktion.Id))
    {
        if (!String.IsNullOrEmpty(registrationFilter))
        {
            switch (registrationFilter)
            {
                case Ransaktion.ClientSummaryStatusCategoryFailedServerValidation:
                    if (!ransaktion.IsFailedServerValidation())
                                    continue;
                    if (!ransaktion.IsFailedDuplicatePatientValidation())
                                   continue;
                    if (!ransaktion.IsFaliedPatientAddressValidation())
                                  continue;
                    //link = ServerValidationsMaster.Uri(ransaktion.Id);
                    break;
            }
        }
    }
}

var SerialNumValDisplayList = new SearchList(); 
var DuplicateDisplayList = new SearchList();
var PatAdressDisplayList = new SearchList();

String queueChar = "";
if (foundInQueue)
    queueChar = "+ ";

//Providers.Instance.Ransaktion.SaveInPlay(ransaktion);
string chevronUri = registrationFilter == Ransaktion.ClientSummaryStatusCategoryInProgress ? null : RegistrationStatusDetail.Uri(ransaktionId);
var item = ransaktion.GetRegistrationMenuItemDetail(link, queueChar, chevronUri);

SerialNumValDisplayList.Items.Add(item);
DuplicateDisplayList.Items.Add(item);
PatAdressDisplayList.Items.Add(item);
if (subHeaderSerialVal.Trim().Length > 0)
{
    block.AppendBoldLine(subHeaderSerialVal);
    Items.Add(block);
    Items.Add(SerialNumValDisplayList);
}

修改后的代码

// 先初始化三个结果集合,放在循环外部避免重复创建
var SerialNumValDisplayList = new SearchList(); 
var DuplicateDisplayList = new SearchList();
var PatAdressDisplayList = new SearchList();

foreach (Ransaktion ransaktion in ransaktionList)
{
    // 跳过ID为空的记录
    if (string.IsNullOrEmpty(ransaktion.Id))
        continue;

    String link = RegistrationStart.Uri(ransaktion.Id);
    String queueChar = foundInQueue ? "+ " : "";
    
    // 修正ransaktionId变量错误,使用当前遍历的ransaktion.Id
    string chevronUri = registrationFilter == Ransaktion.ClientSummaryStatusCategoryInProgress 
        ? null 
        : RegistrationStatusDetail.Uri(ransaktion.Id);

    // 分别判断每个验证失败条件,满足则添加到对应集合
    if (ransaktion.IsFailedServerValidation())
    {
        var item = ransaktion.GetRegistrationMenuItemDetail(link, queueChar, chevronUri);
        SerialNumValDisplayList.Items.Add(item);
    }

    if (ransaktion.IsFailedDuplicatePatientValidation())
    {
        var item = ransaktion.GetRegistrationMenuItemDetail(link, queueChar, chevronUri);
        DuplicateDisplayList.Items.Add(item);
    }

    if (ransaktion.IsFaliedPatientAddressValidation())
    {
        var item = ransaktion.GetRegistrationMenuItemDetail(link, queueChar, chevronUri);
        PatAdressDisplayList.Items.Add(item);
    }
}

// 后续展示逻辑保持不变
if (subHeaderSerialVal.Trim().Length > 0)
{
    block.AppendBoldLine(subHeaderSerialVal);
    Items.Add(block);
    Items.Add(SerialNumValDisplayList);
}

关键修改点

  1. 集合初始化位置调整:将三个SearchList的初始化移到循环外部,避免每次循环重新创建导致之前添加的记录丢失。
  2. 移除互斥筛选逻辑:删除原代码中导致互斥的continue语句,改为分别独立判断每个验证失败条件,满足条件的记录会被添加到对应的集合(一个记录可同时属于多个集合)。
  3. 修正变量错误:将ransaktionId改为ransaktion.Id,确保使用当前遍历的记录ID。
  4. 优化条件判断顺序:先跳过ID为空的记录,减少无效逻辑执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:15:02