LINQ子选择错误

时间:2013-03-25 17:37:01

标签: c# linq 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>'.

怎么做?

3 个答案:

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