.选择Vs.包括Vs.选择多个

本文关键字:选择 Vs 包括 | 更新日期: 2023-09-27 18:21:33

我发现了以下关于.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);

但我实际上无法理解和解释两者之间的区别(Select会得到一个电话号码列表,而SelectMany会将其扁平化为一个电话号列表。)。

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

people.Select(p => p.PhoneNumbers);

&

people.Include(p => p.PhoneNumbers); 

.选择Vs.包括Vs.选择多个

Select可获取电话号码列表,而SelectMany可将其展平为仅包含电话号码的列表。

这正是区别。SelectMany获取集合的集合,并将所有项作为一个集合返回。

people.Select(p => p.PhoneNumbers);

仅选择电话号码。

people.Include(p => p.PhoneNumbers); 

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

您已经回答了第一个问题。=)

people.Include(x=>x.PhoneNumbers)

将加载人民的电话号码。如果你不这样做,人民。PhoneNumber将为null且未加载。

因此,由于PhoneNumbers为null且未加载,因此不会执行此语句:

var phonenumbers = db.peoples.First().PhoneNumbers;
//phonenumbers = null

但如果你喜欢这样:

var phonenumbers = db.peoples.Include(x=>x.PhoneNumbers).First().PhoneNumbers;
//phonenumbers will now be a IEnumerable with Phonenumbers