2014-07-12 43 views
0

我有這樣的場景:如何類集合分配給新的視圖模型

我想和我只想要屬性ViewModel但我的問題是與Collections。所以這裏有一個例子:

主要類型:

public class Customer 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Order> Orders { get; set; } 
    // remove some code for brevity 
} 

public class Order 
{ 
    public int Id { get; set; } 
    public string ItemName { get; set; } 
    public int CustomerId { get; set; } 

    public virtual Customer Customer { get; set; } 
    // remove some code for brevity. 
} 

視圖模型:

public class OrderVM 
{ 
    public string ItemName { get; set; } 
} 

public class CustomerVM 
{ 
    public string Name { get; set; } 
    public ICollection<OrderVM> Orders { get; set; } 
} 

然後我試圖這樣的事情:

_customerService.Include(c => c.Orders) 
    .Select(x => new CustomerVM 
        { 
        Name = x.Name, 
        Orders = x.Orders.Select(order => new OrderVM { ItemName = order.ItemName }) // but it says cannot convert implicitly from IEnumerable to ICollection 
        } 
) 

概括地說,我怎麼能填充CustomerVM的房源?我只想選擇我想要的。有什麼想法嗎?真的停留在這裏。

+0

'..Orders = x.Orders.Select(爲了=>新OrderVM {ItemName = order.ItemName})。ToList()'或將'Orders'改爲'IEnumerable ' –

+0

就這樣了?這整個時間只是'.ToList()'缺乏?非常感謝。你可以在答案部分發布它,以便我可以將其標記爲答案。如果你能爲他人的參考提供更多的解釋,那將是非常好的。謝謝 :) –

回答

1

的LINQ .Select()產生IEnumerable<T>但你的財產是ICollection<T>。您可以將.ToList()添加到查詢中以生成List<T>,即ICollection<T>

​​

另外,如果你沒有特別需要OrdersICollection,那麼你可以在你的屬性定義更改爲

public IEnumerable<OrderVM> Orders { get; set; } 
1

只需使用ToList()將IEnumerable轉換爲ICollection。未經測試,但它應該工作

customerService.Include(c => c.Orders) 
.Select(x => new CustomerVM 
       { 
       Name = x.Name, 
       Orders = x.Orders.Select(order => new OrderVM { ItemName = order.ItemName }).ToList() 
       } 
相關問題