将两个IEnumerable列表中的数据合并/合并为一个

时间:2011-01-25 21:33:43

标签: asp.net c#-4.0

我的应用程序中有以下域对象:

 [Serializable]
    public class Supplier
    {
        public virtual string SupplierType { get; set; }
        public virtual string SupplierCode { get; set; }

        public virtual string Name { get; set; }
        public virtual string Description { get; set; }
        public virtual string Rating { get; set; }
        public virtual string WebsiteURL { get; set; }

        public virtual IList<Address> Address { get; set; }

    }

    [Serializable]
    public class CargoSupplier : Supplier
    {
        public virtual IList<Image> Images { get; set; }
        public virtual string OpeningTime { get; set; }
        public virtual string ClosingTime { get; set; }

        public virtual IList<Product> Products { get; set; }
    }

我必须转到两个单独的存储库来获取描述性内容(来自数据库)和定价(来自外部Web服务),并且将有两个单独的枚举填充数据(描述性内容和定价):

IEnumerable<CargoSupplier> cargoSuppliers_Pricing
IEnumerable<CargoSupplier> cargoSuppliers_Content

cargoSuppliers_Content将使用除IList<Product>之外的数据填充所有字段,而cargoSuppliers_Pricing将填充数据SupplierType, SupplierCode and IList<Product>个字段。 “SupplierType”和“SupplierCode”的组合将成为关键。

现在我必须将内容和定价合并到一个枚举中,这样我就可以将IEnumerable<CargoSupplier> cargoSuppliers返回给我的控制器&amp;视图。合并/合并这两个列表的最佳方法是什么?

4 个答案:

答案 0 :(得分:4)

你在找联盟还是我在问题中遗漏了什么?

var mergedList = list1.Union(list2).ToList();

请记住导入System.Linq命名空间

答案 1 :(得分:3)

使用Enumerable.Concat

  

连接两个序列。

示例:

var result = cargoSuppliers_Content.Concat(cargoSuppliers_Pricing);

答案 2 :(得分:3)

听起来你不希望一个列表只包含任一列表中的所有项目 - 听起来你需要合并单个项目。像这样:

var query = from pricing in cargoSuppliers_Pricing
            join content in cargoSuppliers_Content
            on pricing.SupplierCode equals content.SupplierCode
            select new CargoSupplier
            {
                // Copy properties from both objects here
            };

在“选择”部分中,您将从“定价”中获取定价部分,从“内容”中获取内容部分,构建具有两个位的CargoSupplier对象。

那是你所追求的吗?

答案 3 :(得分:0)

看过Union()扩展方法?这应该做你的事后

IEnumerable<CargoSupplier> allCargoSuppliers = cargoSuppliers_Pricing.Union(cargoSuppliers_Content);