投影
投影的过程就是把取得的结果进行处理,可以把结果集合内的对象只取其中一个或多个元素组成一个新的集合,生成一个原对象、基本类型、元组或匿名对象的新集合。
下面示例代码的数据源:
一、投影成原对象
投影成原对象是从原集合中筛选出满足条件的元素,形成一个新的集合。通过C#版本1和版本2的演示,可以轻松地从用户列表中筛选职业为医生的用户,并生成包含医生信息的新集合。
示例代码如下:
/* C#版本1 */List<User>userList= (fromuinlistwhereu.occupation=="Doctor"selectu).ToList(); /* C#版本2 */List<User>userList=list.Where(p=>p.occupation=="Doctor").ToList();
/* 投影后集合 */[{id=11, name=ZhangSan, age=21, gender=False, occupation=Doctor}, {id=7, name=LiSi, age=21, gender=True, occupation=Doctor}, {id=2, name=WangWu, age=18, gender=False, occupation=Doctor}]
二、投影成基本类型
在这种投影中,只选择原集合中的特定属性(例如姓名)作为新集合的元素。这样,新集合将只包含基本类型(如字符串)的元素,而不是完整的用户对象。这种筛选和投影方式可以更灵活地处理特定属性。
这里是把原有的User集合中每个User的name属性提取出来,组成一个全是name的新的集合,故新集合为String属性。
示例代码如下:
/* C#版本1 */List<string>nameList= (fromuinlistwhereu.occupation=="Doctor"selectu.name).ToList(); /* C#版本2 */List<string>nameList=list.Where(p=>p.occupation=="Doctor").Select(x=>x.name).ToList();
/* 投影后集合 */["Zhang San", "Li Si", "Wang Wu"]
三、投影成元组
投影成元组的过程中,从原集合中选择多个属性,将它们组成一个元组,并生成一个新的元组集合。通过C#版本1和版本2的演示,我们可以得到一个包含用户姓名和年龄的元组集合,方便处理相关信息。
示例代码如下:
/* C#版本1 */varuserList= (fromuinlistwhereu.occupation=="Doctor"select ( Name: u.name, Age: u.age )).ToList(); /* C#版本2 */varuserList=list.Where(x=>x.occupation=="Doctor").Select(u=> (Name: u.name, Age: u.age)).ToList();
/* 投影后集合 */[("Zhang San", 21), ("Li Si", 21), ("Wang Wu", 18)]
四、投影成匿名对象
匿名对象投影是通过选择原集合中的特定属性,构建一个匿名对象的新集合。这样的投影可以在不定义新的数据类型的情况下,直接生成包含所需属性的对象集合。在示例中,我们得到了一个包含用户姓名和年龄的匿名对象集合。
示例代码如下:
/* C#版本1 */varuserList= (fromuinlistwhereu.occupation=="Doctor"selectnew { u.name, u.age }).ToList(); /* C#版本2 */varuserList=list.Where(x=>x.occupation=="Doctor").Select(u=>new { u.name, u.age }).ToList();
/* 投影后集合 */[{"Zhang San", 21}, {"Li Si", 21}, {"Wang Wu", 18}]
这四种投影方式使得对原始数据集进行更灵活的处理和筛选成为可能,提高了代码的可读性和维护性。