2013-03-25 66 views
2

我有這個結構的對象。LINQ子選擇錯誤

public class OrderItem 
{ 
    public string idProduct { get; set; } 
    public int quantity { get; set; } 
    public List<WarehouseItem> WarehouseInfo = new List<WarehouseItem>(); 
} 

public class WarehouseItem 
{ 
    public string Name{ get; set; } 
    public string LocnCode{ get; set; } 
} 

我需要得到所有LocnCode,使他們不同所以結果應該是List<string>。 我試圖做到這一點

List<string> codes = itemList.Select(x => x.WarehouseInfo.Select(y => y.LocnCode)).Distinct(); 

,但是有這樣的錯誤:

Cannot implicitly convert type 'System.Collections.Generic.IEnumerable<System.Collections.Generic.IEnumerable<string>>' to 'System.Collections.Generic.List<string>'.

怎麼辦呢?

+1

的錯誤是因爲你錯過'.ToList()'。但不知道你會找回你想要的。 – 2013-03-25 17:39:24

回答

4

從您的代碼更改點點您可以使用Enumerable.SelectMany扁平化層級:

List<string> distinctCodes = itemList 
     .SelectMany(x => x.WarehouseInfo) 
     .Select(y => y.LocnCode) 
     .Distinct() 
     .ToList(); 
1
List<string> codes = itemList.SelectMany(x => x.WarehouseInfo) 
          .Select(y => y.LocnCode) 
          .Distinct() 
          .ToList(); 

甚至使用SelectMany

List<string> codes = itemList.SelectMany(x => x.WarehouseInfo 
               .Select(y => y.LocnCode)) 
          .Distinct() 
          .ToList(); 
0

其他版本:

var query = from order in items 
      from warehouse in order.WarehouseInfo 
      select warehouse.LocnCode ; 

List<string> codes = query.Distinct().ToList();