C# 选择Vs.包括Vs.选择多个
我发现了以下关于.Select和.SelectMany之间差异的示例C# 选择Vs.包括Vs.选择多个,c#,linq,entity-framework,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<Perso
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可获取电话号码列表,而Select Many可将其展平为电话号码列表
people.Include(p => p.PhoneNumbers);
这正是区别所在SelectMany
获取集合并将所有项目作为一个集合返回
people.Select(p => p.PhoneNumbers);
仅选择电话号码
people.Include(p => p.PhoneNumbers);
选择已加载电话号码的联系人实体。您已经回答了第一个问题。=) 联系人:
people.Include(x=>x.phonenumber)
将在People中加载电话号码。
如果不执行此操作,则people.PhoneNumber将为空且不会加载
由于PhoneNumber为空且未加载,因此不会执行此语句:
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
“这正是区别所在。SelectMany接受集合的集合并将所有项目作为一个集合返回”项目是相同的,但它们被展平到一个列表中。所以你没有
列表
,而是列表
通过连接所有源代码内部列表的项来实现。拥有这两种不同类型的集合的想法是什么?但我无法理解两者之间的区别是什么“select获取电话号码列表,而SelectMany将其展平为一个电话号码列表。”这就是重点。如果您只需要电话号码并使用select。您将收到一个IE,使用SelectMany,您将获得一个IE,在某些情况下,它可能非常方便。
var phonenumbers = db.peoples.Include(x=>x.PhoneNumbers).First().PhoneNumbers;
//phonenumbers will now be a IEnumerable with Phonenumbers