【问题标题】:Linq SelectMany queryLinq SelectMany 查询
【发布时间】:2017-07-04 15:50:38
【问题描述】:

我有以下疑问:

 DateTime cutoffDate = new DateTime(1997, 1, 1); 

 var orders = 
     from c in customers 
     where c.Region == "WA" 
     from o in c.Orders 
     where o.OrderDate >= cutoffDate 
     select new { c.CustomerID, o.OrderID };

这如何用 Linq Lambda 编写? 顺便说一句,这是否称为 SelectMany 查询?

这也可以通过加入来完成,如上所示,这样做的利弊是什么。

【问题讨论】:

    标签: c# linq


    【解决方案1】:

    是的,这是SelectMany。您使用SelectMany 将嵌套或分层集合(在本例中,订单嵌套在客户下)“扁平化”为简单的单层集合。

    customers.Where(c => c.Region == "WA")
        .SelectMany(c => c.Orders)
        .Where(o => o.Orderdate >= cutoffDate)
        .Select(x => new { x.OrderID, x.Customer.CustomerID });
    

    如果订单是客户的属性,则无需使用连接。

    【讨论】:

    • Broadhust - 感谢您的回复。使用 SelectMany 与仅使用联接有什么好处?一个比另一个更有效吗?
    • 取决于 LINQ 提供者;您使用的是LINQ-to-SQL 还是-Objects?看我的问题stackoverflow.com/q/7229569/146077
    • 通常 LINQ 中的规则是“使用最简单的方法”。我们不使用 LINQ 是因为它高效,我们使用它是因为它易于编写和阅读。在这种情况下,Join 的效率可能会降低,因为您正在重新加入已经有引用的东西,但如果不对其进行分析,我不知道。
    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 2021-04-30
    • 2016-05-30
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多