.选择Vs.包括Vs.Select Many

joh*_* Gu 7 c# linq entity-framework

我找到了以下关于.Select和.SelectMany之间差异的例子

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

public class Person
{
    public IEnumerable<PhoneNumber> PhoneNumbers { 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);
Run Code Online (Sandbox Code Playgroud)

但实际上,我无法理解它们之间的区别(选择获取电话号码列表的列表,而SelectMany将其展平为仅列出电话号码.).

Seond问题,写作之间有什么区别: -

people.Select(p => p.PhoneNumbers);
Run Code Online (Sandbox Code Playgroud)

&

people.Include(p => p.PhoneNumbers); 
Run Code Online (Sandbox Code Playgroud)

Mar*_*zek 11

选择获取电话号码列表,而SelectMany将其展平为电话号码列表.

这正是差异.SelectMany获取集合的集合并将所有项目作为一个集合返回.

people.Select(p => p.PhoneNumbers);
Run Code Online (Sandbox Code Playgroud)

仅选择电话号码.

people.Include(p => p.PhoneNumbers); 
Run Code Online (Sandbox Code Playgroud)

选择已加载电话号码的人员实体.

  • 项目是相同的,但它们被压缩成一个列表.所以你没有`List <List <A >>`但是`List <A>`是通过连接所有内部源列表的项目而制作的. (2认同)