【问题标题】:Help with LINQ Projection帮助 LINQ 投影
【发布时间】:2011-04-13 03:58:55
【问题描述】:

我有一个ICollection<Product>

var products = productRepository.FindAll();

Product 有一个名为Orders 的属性,它是一个ICollection<Order>

对于给定的 CustomerId,我试图以 ICollection<Order> 结束。

换句话说:

给定一组产品,我想检索特定客户的订单列表

这是我拥有的:

var orders = products
               .Where(x => x.Orders != null)
               .Where(x => x.Orders.Any(y => y.CustomerId == 10))
               .Select(x => x.Orders)
               .ToList();

但我最终得到一个List<ICollection<Order>>,我想要一个ICollection<Order>

我必须进行某种分组吗?

【问题讨论】:

    标签: c# linq .net-4.0 linq-to-objects


    【解决方案1】:

    怎么样:

    var orders = products
               .Where(x => x.Orders != null)
               .Where(x => x.Orders.Any(y => y.CustomerId == 10))
               .SelectMany(x => x.Orders)
               .ToList();
    

    【讨论】:

    • 是的,就是这样-出于某种原因,我完全忘记了SelectMany。干杯!
    【解决方案2】:

    如果您想要收集单个产品的订单,那么这将起作用

    var orders = products
                   .Where(x => x.Orders != null)
                   .Where(x => x.Orders.Any(y => y.CustomerId == 10))
                   .Select(x => x.Orders)
                   .Single();
    

    【讨论】:

    • 谢谢,但这不是我想要的。
    • @RPM1984 没关系,今天我在LINQ中学习了SelectMany。非常感谢你和@zerkms ...:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 2015-10-15
    • 2019-12-15
    相关资源
    最近更新 更多