LINQ Select Many语句

时间:2014-12-29 20:59:45

标签: c# linq

来自MSDN Linq运营商的文章我发现如下声明。我

https://code.msdn.microsoft.com/LINQ-to-DataSets-09787825

SelectMany - 来自作业

  var orders = 
        from c in customers 
        from o in c.Orders 
        where o.Total >= 2000.0M 
        select new { c.CustomerID, o.OrderID, o.Total }; 

我的问题是没有为客户和订单写任何地方或加入条件,它如何只显示大于2000.0M的订单。该声明不会创建交叉连接。

2 个答案:

答案 0 :(得分:5)

不,查询等同于:

foreach(var c in customers)
{
    foreach(var o in c.Orders)
    {
        if(o.Total >= 2000.0M)
           yield return new { c.CustomerID, o.OrderID, o.Total }; 
    }
}

所以没有join。您只是过滤了orders

答案 1 :(得分:0)

您可以尝试选择多个。但是我认为这基本上与内部联接做同样的事情。

var orders = customers.SelectMany(c => c.Orders)
                      .Where(o => o.Total >= 2000.0M).ToList();