我有这种结构的对象。
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>'.
怎么做?
答案 0 :(得分:4)
您可以使用Enumerable.SelectMany
展平层次结构:
List<string> distinctCodes = itemList
.SelectMany(x => x.WarehouseInfo)
.Select(y => y.LocnCode)
.Distinct()
.ToList();
答案 1 :(得分: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();
答案 2 :(得分:0)
其他版本:
var query = from order in items
from warehouse in order.WarehouseInfo
select warehouse.LocnCode ;
List<string> codes = query.Distinct().ToList();