2011-01-25 115 views
2

我已经在我的应用程序下面的域对象:整合/合并来自两个IEnumerable的列表中的数据到一个

[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将有EXCEPT​​和cargoSuppliers_Pr填充数据的所有领域结冰将有填充数据的SupplierType, SupplierCode and IList<Product>字段。 “供应商类型”和“供应商代码”的组合将是关键。

现在我必须将内容和定价合并为一个枚举,因此我可以将IEnumerable<CargoSupplier> cargoSuppliers返回给我的控制器&视图。将这两个列表合并成一个的最佳方式是什么?

回答

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对象。

那是你以后的样子吗?

+0

+1这也许是对的。我想“合并/合并”意味着他想要的东西比Concat更多。 – 2011-01-25 21:53:00

3

使用Enumerable.Concat

连接两个序列。

实施例:

var result = cargoSuppliers_Content.Concat(cargoSuppliers_Pricing); 
0

看过联盟()扩展方法?这应该做你以后的事情

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

你在找联盟还是我想问题中的东西?

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

记得导入System.Linq命名空间