Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 选择Vs.包括Vs.选择多个_C#_Linq_Entity Framework - Fatal编程技术网

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

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

我发现了以下关于.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可获取电话号码列表,而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