2017-02-26 112 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();