2017-02-26 101 views
0

我试图将两个不同的实体组合成一个新的实体。这里是我的实体类的一个示例:将两个实体合并为一个使用LINQ

public class CarOne 
    { 
     public string Name { get; set; } 

     public string Model { get; set; } 

    } 

    public class CarTwo 
    { 
     public int Year { get; set; } 

     public string Description { get; set; } 

    } 

现在我要保存所有我的两个enties的名单到这个新的实体:

public class CarFinal 
    { 
     public string Name { get; set; } 

     public string Model { get; set; } 

     public int Year { get; set; } 

     public string Description { get; set; } 

    } 

这里是我的代码示例:

 CarOne carToyota = new CarOne() 
     { 
      Name = "Toyota", 
      Model = "Camry" 
     }; 

     CarTwo carDetails = new CarTwo() 
     { 
      Year = 2012, 
      Description = "This is a great car" 
     }; 

     List<CarOne> lstFirst = new List<CarOne>(); 
     lstFirst.Add(carToyota); 

     List<CarTwo> lstSecond = new List<CarTwo>(); 
     lstSecond.Add(carDetails); 

现在这里是我正在尝试做的,我试图结合这两个列表,其中包含相同数量的元素,在这种情况下,两个列表包含一个元素的数量。什么到目前为止,我已经试过是:

 var result1 = lstFirst.Select(x => new CarFinal 
     { 
      Name = x.Name, 
      Model = x.Model 
     }).ToList(); 

     var result2 = lstSecond.Select(x => new CarFinal 
     { 
      Year = x.Year, 
      Description = x.Description 
     }).ToList(); 

     List<CarFinal> lstFinal = new List<CarFinal>(); 
     lstFinal = result1.Union(result2).ToList(); 

我也试过:

 lstFinal = result1.Concat(result2).ToList(); 

但是这两种方法的输出都将产生两个元素,这是我想刚才的所有属性合并成一。我期待只有一个实体,但我总是会在我的组合中获得两个元素。

+2

请阅读使用之前的方法! –

回答

8

使用Zip这样的:

var finalList = lstFirst.Zip(lstSecond, (c1, c2) => new CarFinal() 
     { 
      Name = c1.Name, 
      Model = c1.Model, 
      Description = c2.Description, 
      Year = c2.Year 
     }).ToList();