2012-10-17 38 views
1

我有兩個模型類:投對象的名單到另一名單

public class SalesItem 
{ 
    public string ProductName { get; set; } 
    public double UnitPrice { get; set; } 
    public int Quantity { get; set; } 
} 

public class ProductItem : INotifyPropertyChanged 
{ 
    public string ProductName { get; set; } 
    public double UnitPrice { get; set; } 
} 

我有SalesItem,List<ProductItem> products的名單,我怎麼能轉換爲List<SalesItem> sales


EDITED

List<ProductItem> salesList = new List<ProductItem>(); 
List<SalesItem> salesItem = salesList.Cast<SalesItem>(); 

錯誤:

Connot implicitly convert type 'System.Collections.Generic.IEnumerable<Model.SalesItem>' to 'System.Collections.Generic.List<Model.SalesItem>'. An explicit conversion exists (are you missing a cast? 
+0

如何填補銷售項目的數量 –

+1

是類'ProductItem'和'SalesItem'相關(例如從另一個繼承了?)如果是,如何? – sinelaw

回答

2

屢試不爽

包括命名空間

using System.Linq; 

然後

List<ProductItem> yourProductlist = new List<ProductItem>(); 

yourProductlist.Add(new ProductItem() { ProductName = "A", UnitPrice = 50 }); 
yourProductlist.Add(new ProductItem() { ProductName = "B", UnitPrice = 150 }); 

List<SalesItem> yourSaleslist = yourProductlist.Select(x => 
          new SalesItem() { ProductName = x.ProductName, 
              UnitPrice = x.UnitPrice }).ToList(); 

看到它的工作

enter image description here

鑄造會工作,如果ProductItem從SalesItem類

+0

我也喜歡這個解決方案,我向上投票。 – Alvin

2

在你給出的例子中,你不能在這兩種類型之間進行轉換,因爲它們之間沒有任何共同之處。正確的做法是從baseItem繼承一個baseItem類,然後derivedItem類繼承。然後,你可以這樣做:

List<baseItem> baseList; 
List<derivedItem> derivedList = baseList.Cast<derivedItem>(); 

這通常被稱爲向下轉換,並且往往是不恰當的層次在你的代碼的指標,所以我建議限制其使用。

+1

這不起作用,除非在'.Cast <>()'之後添加'.ToList()'。 – Enigmativity

+0

問題是ProductItem繼承INotifyPropertyChanged。 – Alvin

1

你需要改變SalesItemProductItem繼承,然後你可以使用LINQ,這樣的:

List<ProductItem> products; 
IEnumerable<SalesItem> salesItems = products.Cast<SalesItem>(); 

List<SalesItem> salesItems = products.Cast<SalesItem>().ToList(); 

不要忘記,以確保您有以下在該文件中,爲Cast擴展方法可用:

using System.Linq; 
+0

這不起作用,除非在'.Cast <>()'之後添加'.ToList()'。 – Enigmativity

+0

對。謝謝,我糾正了它... – Ran

1

在這裏,你可以定義什麼defaultQuantity值是繼承的,因爲它不存在ProductItem

List<SalesItem> sales = products.ConvertAll(x => new SalesItem() { 
          ProductName = x.ProductName, 
          Quantity = defaultQuantity, 
          UnitPrice = x.UnitPrice 
         });