首页 > 解决方案 > 将来自不同存储过程的结果合并到 C# 中的单个列表中

问题描述

我正在尝试使用 Concat 方法将两个不同的列表连接在一起,如下所示。我需要将第二个列表添加到第一个列表中,以便它可以作为一个列表出现。

var term = dc.AgentTerm(Agentcode).ToList();
var hosp = dc.AgentHospCashPlan(Agentcode).ToList();
var life = term.Concat(hosp).ToList();

但是当我尝试它时,我得到了这个错误。

错误 16 实例参数:无法转换System.Collections.Generic.List<IbsMobile.AgentTerm_Result>System.Linq.IQueryable<IbsMobile.AgentHospCashPlan_Result> C:\Project\IbsMobile\IbsMobile\Controllers\ParamController.cs 506 24 IbsMobile

错误 17 System.Collections.Generic.List<IbsMobile.AgentTerm_Result>不包含“Concat”的定义,并且最佳扩展方法重载System.Linq.Queryable.Concat<TSource>(System.Linq.IQueryable<TSource>, System.Collections.Generic.IEnumerable<TSource>)有一些无效参数 C:\Project\IbsMobile\IbsMobile\Controllers\ParamController.cs 506 24 IbsMobile

我在网上查了一下,我看到的只是如何将“System.Linq.IQueryable”转换为“System.Collections.Generic.IList”。

我分配给 term 和 Hosp 的结果来自存储过程。

我之前在具有相同类的列表上使用过 concat 方法,并且效果很好。

我猜这个错误是因为结果集来自不同的类。

我知道这是一个新手问题,但我不确定我做错了什么。

标签: c#linq

解决方案


您不能Concat列出两种不同的来源类型。见函数签名:

public static System.Collections.Generic.IEnumerable<TSource> Concat<TSource> 
    (this System.Collections.Generic.IEnumerable<TSource> first, 
     System.Collections.Generic.IEnumerable<TSource> second);

仍然这样做将每个列表投影到共享相同基本类型或接口的某种类型中。一些结构:

public interface IInterface {}
public class AgentTermDTO : IInterface {}
public class AgentHospCashPlanDTO : IInterface {}

或者一个快速而肮脏的解决方案(不要选择这个)是将每个转换为objects 的集合:list1.Cast<object>().Concate(...)


推荐阅读