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

C#使用Lambda表达式对比不同长度数组筛选指定数据写入List

筛选逻辑修复方案

你原有代码存在3个核心问题导致筛选失效:

  • 对比逻辑类型不匹配:拿单个foodCount字符串值和整个数组对象做Equals比较,永远不会返回匹配结果
  • 入参数组未做结构化处理:直接用非泛型IEnumerable接收参数,无法读取数组内的detailCode和foodCount字段做逐行匹配
  • 代码存在多处笔误:包括对象实例化语法错误、变量名写错、字段映射不匹配,会直接导致编译失败或数据读取为空。

前置笔误修复

先把你循环构造tempList部分的错误修正,否则后续逻辑无法运行:

  1. 数组项实例化代码修正:把api_model.array arrays = api_model api_model.array改为api_model.array arrays = new api_model.array
  2. 列表添加代码修正:把tempList.Add(bm)改为tempList.Add(um),bm是未定义的无效变量
  3. 模型字段映射修正:接口返回的食物名称字段拼写为foodNmae(非标准的Name拼写),给api_model的对应属性加NewtonsoftJson映射特性,确保能正确读取到值:
    public class api_model
    {
        [JsonProperty("foodNmae")]
        public string foodName { get; set; }
        public List<array> arrays { get; set; }
        public class array
        {
            public string detailCode { get; set; }
            public string foodCount { get; set; }
        }
    }
    

Lambda筛选实现

替换你原有resultList = tempList;及后续的错误筛选代码,逻辑为:将请求传入的数组转为「明细编码-对应数量」的字典,逐行校验返回条目下所有匹配明细编码的数量是否和请求完全一致,匹配通过的条目存入结果列表,最终筛选结果恰好为foodName=meat的条目,符合你的需求:

// 引用Newtonsoft.Json.Linq,用JArray处理入参里的数组结构
using Newtonsoft.Json.Linq;

// 把请求传入的array转为字典,方便快速匹配
var requestItemMap = (param["array"] as JArray)
    .ToDictionary(
        x => x["detailCode"].ToString(),
        x => x["foodCount"].ToString()
    );

// 执行筛选
resultList = tempList.Where(item => 
{
    // 把当前条目的数组也转为字典
    var currentItemMap = item.arrays.ToDictionary(a => a.detailCode, a => a.foodCount);
    // 校验所有请求传入的明细,在当前条目中都存在且数量完全一致
    return requestItemMap.All(req => 
        currentItemMap.ContainsKey(req.Key) 
        && currentItemMap[req.Key] == req.Value
    );
}).ToList();

如果你不需要做数组匹配,仅需要硬编码保留foodName=meat的条目,直接用下面一行代码即可:

resultList = tempList.Where(x => x.foodName == "meat").ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:30:53