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

合并两个C#匿名类型数组遇CS1929错误,求解决方案

解决C#集合合并时的Concat类型不匹配问题

问题根源

你的代码报错核心是两个查询返回的匿名类型结构不一致:

  • 第一个匿名类型属性为Conn_from、ID_Seal_From
  • 第二个匿名类型属性为Conn_to、ID_Seal_To

C#要求匿名类型的属性名称、类型、顺序完全一致才会被视为同一种类型,因此Concat无法在不同类型的集合间执行。

解决方案

方案1:统一匿名类型属性名(推荐)

将两个查询的匿名类型属性名改成完全一致,让C#识别为同类型,即可正常执行Concat。同时用string.IsNullOrEmpty()简化空值判断:

var query = (from el in l
             where !string.IsNullOrEmpty(el.ID_Seal_From)
             select new
             {
                 Conn = el.Conn_from,
                 SealID = el.ID_Seal_From
             }).ToArray();

var query2 = (from el in l
              where !string.IsNullOrEmpty(el.ID_Seal_To)
              select new
              {
                  Conn = el.Conn_to,
                  SealID = el.ID_Seal_To
              }).ToArray();

// 现在可正常合并
var res = query.Concat(query2);

方案2:使用自定义实体类型

如果需要保留原属性语义,或后续操作需要明确类型,可定义类/结构体,让两个查询都返回该类型实例:

// 定义自定义类型
public class SealConnection
{
    public string Connection { get; set; }
    public string SealID { get; set; }
}

var query = (from el in l
             where !string.IsNullOrEmpty(el.ID_Seal_From)
             select new SealConnection
             {
                 Connection = el.Conn_from,
                 SealID = el.ID_Seal_From
             }).ToArray();

var query2 = (from el in l
              where !string.IsNullOrEmpty(el.ID_Seal_To)
              select new SealConnection
              {
                  Connection = el.Conn_to,
                  SealID = el.ID_Seal_To
              }).ToArray();

// 合并操作正常执行
var res = query.Concat(query2);

方案3:延迟枚举(优化性能)

若无需提前转数组,可直接对IEnumerable<T>执行Concat,避免提前枚举集合提升性能:

// 保持为IEnumerable<匿名类型>,不提前ToArray()
var query = from el in l
            where !string.IsNullOrEmpty(el.ID_Seal_From)
            select new
            {
                Conn = el.Conn_from,
                SealID = el.ID_Seal_From
            };

var query2 = from el in l
             where !string.IsNullOrEmpty(el.ID_Seal_To)
             select new
             {
                 Conn = el.Conn_to,
                 SealID = el.ID_Seal_To
             };

// 最后按需转为数组或列表
var res = query.Concat(query2).ToArray();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:54:29