前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#进阶-LINQ表达式之投影

C#进阶-LINQ表达式之投影

作者头像
Damon小智
发布2024-02-03 10:34:00
1000
发布2024-02-03 10:34:00
举报
文章被收录于专栏:全栈文档库全栈文档库

本篇文章我们将演示LINQ扩展包语法里的投影特性,用投影实现LINQ结果集的类型转换。目前LINQ支持两种语法,我会在每个案例前先用大家熟知的SQL语句表达,再在后面用C#的两种LINQ语法分别实现。LINQ语法第一次接触难免感到陌生,最好的学习方式就是在项目中多去使用,相信会有很多感悟。

投影

投影的过程就是把取得的结果进行处理,可以把结果集合内的对象只取其中一个或多个元素组成一个新的集合,生成一个原对象、基本类型、元组或匿名对象的新集合。

① 投影成原对象

代码语言:javascript
复制
/* C#版本1 */
List<User> userList = (from u in list where u.occupation == "Doctor" select u).ToList();
/* C#版本2 */
List<User> userList = list.Where(p => p.occupation == "Doctor").ToList();
代码语言:javascript
复制
/* 投影后集合 */
[{id = 11, name = Zhang San, age = 21, gender = False, occupation = Doctor}, 
{id = 7, name = Li Si, age = 21, gender = True, occupation = Doctor}, 
{id = 2, name = Wang Wu, age = 18, gender = False, occupation = Doctor}]

② 投影成基本类型

这里是把原有的User集合中每个User的name属性提取出来,组成一个全是name的新的集合,故新集合为String属性。

代码语言:javascript
复制
/* C#版本1 */
List<string> nameList = (from u in list where u.occupation == "Doctor" select u.name).ToList();
/* C#版本2 */
List<string> nameList = list.Where(p => p.occupation == "Doctor").Select(x => x.name).ToList();
代码语言:javascript
复制
/* 投影后集合 */
["Zhang San", "Li Si", "Wang Wu"]

③ 投影成元组

代码语言:javascript
复制
/* C#版本1 */
var userList = (from u in list where u.occupation == "Doctor" select ( Name: u.name, Age: u.age )).ToList();
/* C#版本2 */
var userList = list.Where(x => x.occupation == "Doctor").Select(u => (Name: u.name, Age: u.age)).ToList();
代码语言:javascript
复制
/* 投影后集合 */
[("Zhang San", 21), ("Li Si", 21), ("Wang Wu", 18)]

④ 投影成匿名对象

代码语言:javascript
复制
/* C#版本1 */
var userList = (from u in list where u.occupation == "Doctor" select new { u.name, u.age }).ToList();
/* C#版本2 */
var userList = list.Where(x => x.occupation == "Doctor").Select(u => new { u.name, u.age }).ToList();
代码语言:javascript
复制
/* 投影后集合 */
[{"Zhang San", 21}, {"Li Si", 21}, {"Wang Wu", 18}]
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-1-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 投影
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com