Linq数据类型转换

简介: 通过使用 LINQ 查询,可以将源序列用作输入,并采用多种方式修改它以创建新输出序列。可以通过排序和分组来修改序列本身,而不必修改元素本身。但是,LINQ 查询最强大的功能可能在于它能够创建新类型,这一功能在 select 子句中实现。

通过使用 LINQ 查询,可以将源序列用作输入,并采用多种方式修改它以创建新输出序列。可以通过排序和分组来修改序列本身,而不必修改元素本身。但是,LINQ 查询最强大的功能可能在于它能够创建新类型,这一功能在 select 子句中实现

(一)Student

public   class  Student
{
    
public   string  FirstName {  get set ; }
    
public   string  LastName {  get set ; }
    
public   int  Unid {  get set ; }
    
public  List < int >  Scores {  get set ; }
}

 

(二)选择源元素子集

学生列表集合

List < Student >  _list  =   new  List < Student > () 

new  Student {FirstName = " Svetlana " , LastName = " Omelchenko " ,
             Unid
= 111 , Scores  =   new  List < int > { 97 92 81 60 }},
new  Student {FirstName = " Claire " , LastName = " O’Donnell "
             Unid
= 112 , Scores  =   new  List < int > { 75 84 91 39 }},
new  Student {FirstName = " Sven " , LastName = " Mortensen "
             Unid
= 113 , Scores  =   new  List < int > { 88 94 65 91 }}
};

 

1)选择一个成员

·选择FirstName

var list  =  from p  in  _list select p.FirstName; 

foreach  ( string  s  in  list)
    Console.WriteLine(s);

 

这里可以使用匿名类型。因为select部分为字符串类型,所以,也可以是字符串型泛型集合

List < string >  list  =  (from p  in  _list 
                    select p.FirstName).ToList
< string > ();
foreach  ( string  s  in  list)
   Console.WriteLine(s);

 

·选择Scores

这里为整型泛型集合,

可以使用匿名类型

var list1  =  from p  in  _list select p.Scores;

foreach  (var l  in  list1)
{
   
foreach  ( int  i  in  l)
      Console.WriteLine(i);
}

 

因为结果集为整型泛型集合,所以也可以使用

List < List < int >>  list  =  (from p  in  _list 
select p.Scores).ToList
< List < int >> ();

foreach  (List < int >  l  in  list)
{
    
foreach  ( int  i  in  l)
       Console.WriteLine(i);
}

 

2)选择多个成员

·使用匿名类型

var q  =  from p  in  _list
        select 
new  { Name  =  p.FirstName  +   " · "   +  p.LastName };

foreach  (var x  in  q)
    Console.WriteLine(x.Name);

 

其中select返回部分也为一个复合类型,所以在访问时,要以元素的.Name来访问。

如果使用匿名类型时,不采用别名赋值的话,会有异常:

无效的匿名类型成员声明符。匿名类型成员必须使用赋值、简单名称或成员访问来声明。

·使用命名对象

新建Sample

public   class  Sample
{
    
public   string  Name {  get set ; }
}

 

使用

var q  =  from p  in  _list
        select 
new  Sample { Name  =  p.FirstName  +   " · "   +  p.LastName };

foreach  (var x  in  q)
    Console.WriteLine(x.Name);

 

发现与匿名类型复合值时相近。其实也就是:

List < Sample >  list =  (from p  in  _list
    select 
new  Sample { Name  =  p.FirstName  +   " · "   +  p.LastName }).ToList < Sample > ();

foreach  (Sample x  in  list)
    Console.WriteLine(x.Name);

 

(三)转换为Xml

还是用上边那那个学生集合

List < Student >  _list  =   new  List < Student > () 

new  Student {FirstName = " Svetlana " , LastName = " Omelchenko "
             Unid
= 111 , Scores  =   new  List < int > { 97 92 81 60 }},

new  Student {FirstName = " Claire " , LastName = " O’Donnell "
             Unid
= 112 , Scores  =   new  List < int > { 75 84 91 39 }},

new  Student {FirstName = " Sven " , LastName = " Mortensen "
             Unid
= 113 , Scores  =   new  List < int > { 88 94 65 91 }}
            }; 

var xele 
=   new  XElement( " Students " ,
              from student 
in  _list 
        let x 
=  String.Format( " {0},{1},{2},{3} "
        student.Scores[
0 ],
        student.Scores[
1 ],
        student.Scores[
2 ],
        student.Scores[
3 ])

                select 
new  XElement( " student " ,
                    
new  XElement( " FirstName " ,student.FirstName),
                    
new  XElement( " LastName " , student.LastName),
                    
new  XElement( " Unid " , student.Unid),
                    
new  XElement( " Scores " , x)
                    ) 
                );

Console.WriteLine(xele);

 

现在分析一下:

1Xelement元素的构造方法

public  XElement(XName name,Object[] content)

 

2)上边的生成xml的构造方法其实使用的就是这个

第一部分:"Students"为根元素

而下边那么多其实是一行的内容,即占用第二个参数,要记住一句话 查询在select中实现。所以意思就是返回Xelement类型的结果集,而这个结果集正好为构造方法中Object[] content部分。

可知道student这个元素包含4个子节点。而Scores这里是List<int>类型,所以设定了返回类型及格式为字符串且用逗号隔开。(Let:可以将表达式结果存放在新的范围变量中)。

 

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
数据安全/隐私保护 计算机视觉
2024年2月国内如何快速注册OnlyFans最新小白教学
onlyfans软件是一个创立于2016年的订阅式社交媒体平台,创作者可以在自己的账号发布原创的照片或视频,并需要注意的是,网络上可能存在非法或不道德的应用将其设置成付费模式,若用户想查看则需要每月交费订阅。程序,建议你在使用互联网时保持警惕,并遵循相关法律法规。(现在p站没了,大家晚上懂得都懂啊)
2024年2月国内如何快速注册OnlyFans最新小白教学
|
人工智能 监控 算法
【AI 现况分析】AI 应用导致的隐私问题分析
【1月更文挑战第27天】【AI 现况分析】AI 应用导致的隐私问题分析
|
AI芯片
AIGC视频生成/编辑技术调研报告
随着图像生成领域的研究飞速发展,基于diffusion的生成式模型取得效果上的大突破。在图像生成/编辑产品大爆发的今天,视频生成/编辑技术也引起了学术界和产业界的高度关注。该分享主要介绍视频生成/编辑的研究现状,包括不同技术路线的优劣势,以及该领域当下面临的核心问题与挑战。
1910 2
AIGC视频生成/编辑技术调研报告
|
9月前
|
人工智能 物联网 大数据
申报开启|2024年阿里云协同育人第二批项目申报指南
2024年阿里云协同育人第二批项目申报正式开启。为落实国家教育规划,深化产教融合,阿里云设立教学内容和课程体系改革、实践条件和实践基地建设等项目,支持高校创新人才培养。申报截止日期为2024年11月15日,立项公示于11月29日前完成。欢迎各高校积极申报,共育创新人才。
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
7781 119
|
11月前
|
监控 数据可视化 项目管理
高效时间管理工具如何帮助优化日常任务管理?2024年6款最优秀软件
在快节奏的现代工作环境中,高效的时间管理和任务协作工具成为提升生产力的关键。2024年,随着工作模式的变化,企业及个人愈发依赖这些工具来优化时间管理、任务分配和团队协作。本文精选了几款高效工具,如板栗看板、ClickUp、Notion、Wrike、Todoist和Evernote,它们各自具备独特优势,适用于不同行业和规模的团队,帮助用户在繁忙的工作中保持高效和有序。
1599 6
高效时间管理工具如何帮助优化日常任务管理?2024年6款最优秀软件
|
小程序 C++
【微信小程序-原生开发】实用教程19 - 表单范例 VS 表单校验(含必填校验函数封装,实时数字校验)
【微信小程序-原生开发】实用教程19 - 表单范例 VS 表单校验(含必填校验函数封装,实时数字校验)
293 0
|
机器学习/深度学习 人工智能 自然语言处理
AI与法律行业:智能法律咨询
在科技飞速发展的今天,人工智能(AI)正逐渐渗透到法律行业,特别是在智能法律咨询领域。本文探讨了AI在智能法律咨询中的应用现状、优势及挑战,并展望了其未来发展前景。AI技术通过大数据、自然语言处理等手段,提供高效、便捷、低成本且个性化的法律服务,但同时也面临数据隐私、法律伦理等问题。未来,AI将在技术升级、政策推动和融合创新中,为用户提供更加优质、便捷的法律服务。
|
关系型数据库 MySQL OLAP
数据传输DTS是什么?
【8月更文挑战第30天】数据传输DTS是什么?
1269 3
|
自然语言处理 资源调度 机器人
10G显存,使用Unsloth微调Qwen2并使用Ollama推理
本文主要使用Unsloth基于Qwen2基础模型微调对话机器人以及在Ollama上运行。