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

C# Linq如何实现两个不同类型列表按指定规则合并排序

实现方案

两个不同类型的列表无法直接合并,首先需要将两类数据统一投影到相同结构,再按要求排序即可,下面提供两种适配不同场景的实现:

方案1:匿名类型实现(无侵入,无需修改原类定义)

如果只需要读取合并后的结果,不需要保留原始类的类型信息,直接用匿名类型投影即可:

var mergedResult = listDataA
    // 将DataA投影为包含三个目标属性的匿名类型
    .Select(a => new { a.Data, a.Order, a.CreatedOn })
    // 合并投影后的DataB列表
    .Concat(listDataB.Select(b => new { b.Data, b.Order, b.CreatedOn }))
    // 先按Order升序排序
    .OrderBy(item => item.Order)
    // Order相同时按CreatedOn升序排序
    .ThenBy(item => item.CreatedOn)
    .ToList();

方案2:公共接口实现(保留原始类型信息)

如果需要后续操作原始类型的对象,可以先定义公共接口让两个类实现,再合并排序:

  1. 定义公共接口并修改类实现:
public interface IData
{
    string Data { get; }
    int Order { get; }
    DateTime CreatedOn { get; }
}

public class DataA : IData
{
    public string Data { get; set; }
    public int Order { get; set; }
    public DateTime CreatedOn { get; set; }
}

public class DataB : IData
{
    public string Data { get; set; }
    public int Order { get; set; }
    public DateTime CreatedOn { get; set; }
}
  1. 执行合并排序:
var mergedResult = listDataA.Cast<IData>()
    .Concat(listDataB.Cast<IData>())
    .OrderBy(item => item.Order)
    .ThenBy(item => item.CreatedOn)
    .ToList();

两种方案最终输出的结果都和你给出的预期结果完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:15:08