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

从实体实例列表获取Invalid Dir值时遇枚举无结果异常的解决方法

问题分析与解决

原代码的核心错误

  1. 类型判断逻辑错误:invalidDirflag是通过Where返回的IEnumerable<T>集合对象,并非布尔值,直接用invalidDirflag.Equals(false)做判断完全不符合语法逻辑,这会导致if块内的代码永远无法执行,后续遍历空集合时就会抛出「Enumeration yielded no results」异常。
  2. 冗余重复操作:循环遍历整个entityInstance列表时,每次都重复创建filters、添加过滤条件并调用filterDeterminedDocuments传入全量列表,既浪费性能又不符合需求逻辑。

正确实现代码

根据你“获取invalid Dir的值”以及后续处理有效项的需求,给出两种场景的正确代码:

场景1:获取所有invalid Dir的项

var entityInstance = FacadeServiceContext.LoadEntityBaseInstances(entityName, searchParams, context: null).ToList();
if (entityInstance != null && entityInstance.Any())
{
    // 筛选出所有属于invalid Dir的项
    var invalidDirItems = entityInstance.Where(item => item.Equals(CustomConstants.ICMInvalidDIR)).ToList();
    
    // 这里可以对invalid Dir的项做后续处理,比如日志记录、单独存储等
    foreach (var invalidItem in invalidDirItems)
    {
        // 示例逻辑:记录无效项信息
        // Logger.LogWarning($"检测到无效目录项:{invalidItem}");
    }
}

场景2:筛选非invalid Dir的项并执行后续文档过滤逻辑

var entityInstance = FacadeServiceContext.LoadEntityBaseInstances(entityName, searchParams, context: null).ToList();
if (entityInstance != null && entityInstance.Any())
{
    // 过滤掉invalid Dir的项,只保留有效项
    var validItems = entityInstance.Where(item => !item.Equals(CustomConstants.ICMInvalidDIR)).ToList();
    
    if (validItems.Any())
    {
        // 仅创建一次过滤条件,避免重复操作
        var filters = new Dictionary<string, List<string>>();
        addHeaderFilters(filters, request);
        addLineItems(filters, (JArray)request[SourcingConstants.ClientSoCoApplicableDocumentsAttributesItemsFieldName]);
        // 传入有效项执行文档过滤
        coAppDocs.AddRange(filterDeterminedDocuments(validItems, filters));
    }
}

补充说明

  • 使用ToList()立即执行LINQ查询,避免延迟执行导致的后续枚举异常。
  • 先判断集合是否非空再操作,避免空引用问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 13:50:17