Select和SelectMany之间的区别

我一直在搜索SelectSelectMany之间的区别,但我一直无法找到合适的答案。 我需要了解使用LINQ To SQL时的差异,但我发现的都是标准数组示例。

有人可以提供一个LINQ To SQL的例子吗?


SelectMany平返回列表的查询。 例如

public class PhoneNumber
{
    public string Number { get; set; }
}

public class Person
{
    public IEnumerable<PhoneNumber> PhoneNumbers { get; set; }
    public string Name { get; set; }
}

IEnumerable<Person> people = new List<Person>();

// Select gets a list of lists of phone numbers
IEnumerable<IEnumerable<PhoneNumber>> phoneLists = people.Select(p => p.PhoneNumbers);

// SelectMany flattens it to just a list of phone numbers.
IEnumerable<PhoneNumber> phoneNumbers = people.SelectMany(p => p.PhoneNumbers);

// And to include data from the parent in the result: 
// pass an expression to the second parameter (resultSelector) in the overload:
var directory = people
   .SelectMany(p => p.PhoneNumbers,
               (parent, child) => new { parent.Name, child.Number });

.NET小提琴在线演示


选择许多就像在SQL中交叉连接操作一样,它将跨产品。
例如,如果我们有

Set A={a,b,c}
Set B={x,y}

选择许多可用于获得以下设置

{ (x,a) , (x,b) , (x,c) , (y,a) , (y,b) , (y,c) }

请注意,在这里我们从集合A和集合B的元素中获取所有可能的组合。

这是一个可以尝试的LINQ示例

  List<string> animals = new List<string>() { "cat", "dog", "donkey" };
  List<int> number = new List<int>() { 10, 20 };

  var mix=number.SelectMany(num => animals, (n, a) => new { n, a });

混合物将具有如下扁平结构中的以下元素

{(10,cat), (10,dog), (10,donkey), (20,cat), (20,dog), (20,donkey)}

在这里输入图像描述

var players = db.SoccerTeams.Where( c=> c.Country == "Spain")
.SelectMany( c => c.players);

foreach(var player in players) { Console.WriteLine( player.LastName); }

  • 罗纳尔多
  • 梅西
  • 法布雷加斯
  • 卡西利亚斯
  • ...

    链接地址: http://www.djcxy.com/p/3913.html

    上一篇: Difference Between Select and SelectMany

    下一篇: Functional, Declarative, and Imperative Programming