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

如何在C#中依据另一个列表的SequenceId对列表排序?

解决方案

先把sequenceList转换成字典,用来快速定位每个SequenceId对应的排序优先级:

// 构建SequenceId到排序索引的映射
var sequenceOrderMap = sequenceList
    .Select((item, index) => new { item.SequenceId, Index = index })
    .ToDictionary(x => x.SequenceId, x => x.Index);

接着对secondList做排序:匹配sequenceList的元素按字典里的索引顺序排,不匹配的直接放到后面。如果需要给后面的元素再加排序规则(比如按SequenceId升序),可以追加ThenBy:

var sortedSecondList = secondList
    .OrderBy(item => sequenceOrderMap.TryGetValue(item.SequenceId, out var index) ? index : int.MaxValue)
    // 可选:给不匹配的元素加额外排序规则,比如按SequenceId排序
    .ThenBy(item => item.SequenceId)
    .ToList();

完整代码示例

// 获取sequenceList
var sequenceList = await context.SequenceDB
    .Where(c => c.PeopleId == peopleId)
    .Select(c => new {
        SequenceId = c.SequenceId,
        Relevant = c.Relevant
    })
    .OrderBy(c => c.Relevant)
    .ToListAsync();

// 获取secondList
var secondList = await context.Activity.ToListAsync();

// 构建顺序映射字典
var sequenceOrderMap = sequenceList
    .Select((seq, idx) => new { seq.SequenceId, Order = idx })
    .ToDictionary(x => x.SequenceId, x => x.Order);

// 执行排序
var sortedList = secondList
    .OrderBy(item => sequenceOrderMap.ContainsKey(item.SequenceId) ? sequenceOrderMap[item.SequenceId] : int.MaxValue)
    // 可根据需求调整后续排序规则,比如按创建时间排序
    .ThenBy(item => item.SequenceId)
    .ToList();

说明

  • 用字典做映射是为了让查找操作更快,避免每次排序都遍历sequenceList
  • 用int.MaxValue确保不匹配的元素全排在匹配元素后面
  • 后面的ThenBy可以根据实际需求修改,比如换成按活动创建时间、名称等属性排序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 13:15:39