2013-03-25 2 views
2

У меня есть объект с этой структурой.LINQ sub-select Ошибка

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()'. Но не уверен, что вы получите то, что хотите. –

ответ

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();