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

C#中如何按指定关联属性合并两个不同对象列表?

问题:通过属性关联合并两个类列表

我有两个类Parameter和RuleSetParameter,希望通过Parameter.Name与RuleSetParameter.ParameterName属性进行关联合并,最终获取对应的ParameterValue。

类定义如下:

public class Parameter
{
   public string Name { get; set; }
   public string Value { get; set; }
}

public class RuleSetParameter
{
    public string ParameterName { get; set; }
    public string ParameterValue { get; set; }
    public int ParameterType { get; set; }
 }

我尝试过以下代码,但它只是按顺序映射,无法实现按属性关联的需求:

var parameterDictionary = RuleSetParameter.Zip(parameters).ToDictionary(x => x.First, x => x.Second);

请问该如何实现预期效果?


解决方法

方法1:使用Linq的Join直接关联

这是最直观的实现方式,通过Join方法基于匹配属性关联两个集合,按需提取目标数据:

// 假设你有两个列表:List<Parameter> parameters 和 List<RuleSetParameter> ruleSetParameters
var mergedResult = parameters.Join(
    ruleSetParameters,
    param => param.Name, // Parameter的关联键
    ruleParam => ruleParam.ParameterName, // RuleSetParameter的关联键
    (param, ruleParam) => new 
    {
        ParameterName = param.Name,
        OriginalParameterValue = param.Value,
        MappedRuleValue = ruleParam.ParameterValue,
        RuleParamType = ruleParam.ParameterType
    }
);

如果只需要构建Parameter.Name到ParameterValue的字典:

var paramValueDict = parameters.Join(
    ruleSetParameters,
    p => p.Name,
    rsp => rsp.ParameterName,
    (p, rsp) => new { p.Name, rsp.ParameterValue }
).ToDictionary(x => x.Name, x => x.ParameterValue);

方法2:先转字典再匹配(大数量场景更高效)

如果RuleSetParameter中的ParameterName是唯一值,先把它转成以ParameterName为键的字典,再遍历Parameter列表匹配,这种方式在数据量较大时性能更优:

var ruleParamDict = ruleSetParameters.ToDictionary(rsp => rsp.ParameterName, rsp => rsp.ParameterValue);

// 只保留两边都能匹配到的项
var paramValueDict = parameters
    .Where(p => ruleParamDict.ContainsKey(p.Name))
    .ToDictionary(p => p.Name, p => ruleParamDict[p.Name]);

扩展:保留所有Parameter项

如果需要保留所有Parameter(即使没有对应的RuleSetParameter),可以给无匹配的项设置默认值:

var paramValueDict = parameters.ToDictionary(
    p => p.Name,
    p => ruleParamDict.TryGetValue(p.Name, out var value) ? value : null
);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 08:05:29