我找到了以下关于.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);
但实际上我无法理解它们之间的区别(选择获取电话号码列表的列表,而SelectMany将其展平为电话号码列表。)。
Seond问题,写作之间有什么区别: -
people.Select(p => p.PhoneNumbers);
&安培;
people.Include(p => p.PhoneNumbers);
答案 0 :(得分:11)
选择获取电话号码列表的列表,而SelectMany将其展平为电话号码列表。
这正是差异。 SelectMany
获取集合的集合并将所有项目作为一个集合返回。
people.Select(p => p.PhoneNumbers);
仅选择电话号码。
people.Include(p => p.PhoneNumbers);
选择已加载电话号码的人员实体。
答案 1 :(得分:1)
您已经回答了第一个问题。 =)
:people.Include(x=>x.PhoneNumbers)
将加载人民中的语音。 如果您不这样做,则people.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