西安网站开发公司定制,开发公司工程项目管理总结经验教训,西安网站策划设计,全国证书统一查询证书一、前言 学习心得#xff1a;C# 入门经典第8版书中的第22章《LINQ》
二、LINQ to XML
我们可以通过LINQ to XML来创造xml文件 如下示例#xff0c;我们用LINQ to XML来创造。
BooksCSharp Time2019bookC# 入门经典/book…一、前言 学习心得C# 入门经典第8版书中的第22章《LINQ》
二、LINQ to XML
我们可以通过LINQ to XML来创造xml文件 如下示例我们用LINQ to XML来创造。
BooksCSharp Time2019bookC# 入门经典/bookbookC# 高级编程/bookbookC# 深入解析/bookbookWPF 编程宝典/book/CSharpJava/Java
/Books
第一步引用命名空间
using System;
using System.Xml.Linq;
第二步 示例代码两种写法 static void Main(string[] args){XDocument doc new XDocument(new XElement(Books, new XElement(Charp, new XAttribute(Time, 2019),new XElement(new XElement(book, C# 入门编程)),new XElement(new XElement(book, C# 高级编程)),new XElement(new XElement(book, 深入解析)),new XElement(new XElement(book, 编程宝典))),new XElement(new XElement(Java, ))));Console.WriteLine(doc);Console.WriteLine(------分割线--------);XDocument doc2 new XDocument(new XElement(Books,new XElement(CSharp,new XAttribute(Time, 2019),new[] { new XElement(Book, C# 入门编程),new XElement(Book, C# 高级编程),new XElement(Book, 深入解析),new XElement(Book, 编程宝典) }),new XElement(Java)));Console.WriteLine(doc2);Console.ReadLine();}
执行效果 三、LINQ查询语法
LINQ查询语法可以帮助我们快速的查询我们想要的数据对集合数组都管用。
第一步引用
using System;
using System.Linq;
第二步示例代码 string[] chineseStrings {
你好, 世界, 学习, 编程, 科技,
创新, 发展, 梦想, 努力, 成就,
希望, 未来, 探索, 挑战, 实现};var L from n in chineseStrings where n.Contains(习) select n;foreach (var l in L) { Console.WriteLine(l); }Console.ReadLine(); 示例解释LINQ 查询语法来查找 chineseStrings 数组中包含特定字符习的成员并将结果存储在变量 L 中。这里的 from 关键字用于指定集合中的元素where 关键字用于筛选满足特定条件的元素select 则用于选择要返回的内容。 四、LINQ方法语法
上述代码我们可以使用扩展方法来实现同样效果。使用WhereT 方法
举个例子 string[] chineseStrings {
你好, 世界, 学习, 编程, 科技,
创新, 发展, 梦想, 努力, 成就,
希望, 未来, 探索, 挑战, 实现};//var L from n in chineseStrings where n.Contains(习) select n;var L chineseStrings.Where(n n.Contains(习));foreach (var l in L) { Console.WriteLine(l); }Console.ReadLine(); 示例解释通过chineseStrings“.”就能看见很多可以使用的扩展方法。 五、LINQ排序查询结果
orderby 子句 orderby默认排序是A-Z 但如果加入了descending 关键字则代表相反 string[] chineseStrings {
啊, 吧, 从, 的, 额,
发, 就, 和, 就,
看, 了, 吗, 你, 哦};var L from n in chineseStrings orderby n descending select n;foreach (var l in L) { Console.WriteLine(l); }Console.ReadLine(); 当前示例对数组进行降序排序 输出效果哦--你--吗--了--看--就--就--和--发--额--的--从--吧--啊--。 当然您可以自定义升序排序默认不写关键字就是升序 string[] chineseStrings {
啊, 吧啊, 从啊啊, 的啊啊啊, 额啊啊啊啊,
发啊啊啊啊啊};var L from n in chineseStrings orderby n.Length select n;foreach (var l in L) { Console.WriteLine(l); }Console.ReadLine(); 执行效果 六、聚合运算符 聚合函数是指用于对一组数据执行计算并返回单个结果的函数。这些函数通常用于对数据集合进行汇总、计数、平均值、最大值、最小值等操作。LINQLanguage Integrated Query是 C# 中处理集合的强大工具之一它提供了一系列的聚合函数可以应用在查询中。 using System;
using System.Linq;
namespace My
{class Program{static void Main(string[] args){int[] fiftyElementArray new int[50] {1, 2, 3, 4, 5, 6, 7, 8, 9, 10,11, 12, 13, 14, 15, 16, 17, 18, 19, 20,21, 22, 23, 24, 25, 26, 27, 28, 29, 30,31, 32, 33, 34, 35, 36, 37, 38, 39, 40,41, 42, 43, 44, 45, 46, 47, 48, 49, 50
};Console.WriteLine($数组元素个数{fiftyElementArray.Count()});Console.WriteLine($平均值{fiftyElementArray.Average()});Console.WriteLine($最小值{fiftyElementArray.Min()});Console.WriteLine($最大值{fiftyElementArray.Max()});Console.WriteLine($总和{fiftyElementArray.Sum()});Console.ReadLine();}}
} 示例解释 创建了一个包含 1 到 50 的整数数组并使用 LINQ 的聚合函数计算了各种统计信息。当你运行这段代码时它会输出数组的元素个数、平均值、最小值、最大值和总和。 七、单值选择查询
单值查询顾名思义就是返回结果不返回重复的值。
举个例子
using System;
using System.Linq;
namespace My
{class Program{static void Main(){Student[] students {new Student { ClassID 10, Name 张三 },new Student { ClassID 10, Name 李四 },new Student { ClassID 11, Name 王五 },new Student { ClassID 11, Name 赵六 },new Student { ClassID 12, Name 钱七 }};var student (from m in students select m.ClassID).Distinct();foreach (var item in student){Console.WriteLine(item);}Console.ReadLine();}class Student{public string Name { get; set; }public int ClassID { get; set; }}}
} 示例解释 使用 LINQ 查询语法从学生数组中选择每个学生的 ClassID 属性并使用 Distinct() 方法获取不重复的 ClassID 值然后在控制台输出这些值。Distinct() 方法是 LINQ 提供的一个方法用于在序列中筛选出不重复的元素即返回序列中唯一的元素。当然您也可以使用扩展方法Select 。举个例子:var student students.Select(m m.ClassID).Distinct(); 八、多级排序 多级排序指的是按照多个条件进行排序。通过LINQ查询表达式和orderby关键字可以轻松实现多级排序
举个例子
using System;
using System.Collections.Generic;
using System.Linq;
namespace My
{class Program{static void Main(){ListPerson people new ListPerson{new Person(Alice, 25),new Person(Bob, 30),new Person(Charlie, 35),new Person(David, 40),new Person(Eve, 45)};//按年龄排序后按姓名长度降序排序var LL from o in people orderby o.Age orderby o.Name.Length descending select o;foreach(Person o in LL){Console.WriteLine(o.Name);}Console.ReadLine();}}class Person{public string Name { get; set; }public int Age { get; set; }public Person(string name, int age){Name name;Age age;}}
} 示例解释 使用LINQ进行多级排序的示例。我创建了一个ListPerson对象并使用LINQ进行排序操作。首先按照年龄升序排序然后在年龄相同时按照姓名长度降序排序。最后使用循环遍历排序后的结果并输出每个人的姓名。 九、分组查询
using System.Collections.Generic;
using System.Linq;
namespace My
{class Program{static void Main(){ListStudent students new ListStudent{new Student { Name Alice, Age 18 },new Student { Name Bob, Age 20 },new Student { Name Charlie, Age 18 },new Student { Name David, Age 19 },new Student { Name Eve, Age 20 },new Student { Name Eve, Age 40 }};//按照名称分组// var temp from student in students group student by student.Name;//按照年龄对学生进行分组并按照分组后的平均年龄进行排序。var temp2 from student in students group student by student.Age into AGe select new { AvgAge AGe.Average(n n.Age), AGe.Key };var temp3 from student in temp2 orderby student.AvgAge select student;}}class Student{public string Name { get; set; }public int Age { get; set; }}
} 示例解释 当前代码 temp2 这段赋值代码的意思是,LINQ对students数组进行操作group student 是对当前对象进行分组操作 by student.Age 对当前student.Age 的值来进行分组 into AGe 是返回一个新的结果集然后对这个新的结果集 创建了一个匿名对象new { AvgAge AGe.Average(n n.Age), AGe.Key };我们之前的写法都是返回当前的结果集但我们这里创建了一个匿名对象 对象中有两个值 一个值是计算当前结果集的平均值n n.Age是值具体计算的平均值成员然后赋值给匿名类型AvgAge 这个匿名对象的第一个值第二个值是当前的键也就是可以理解为分组的的组名最后返回给Temp2。temp3 则是对temp2的结果中的平均值进行一个升序排序。 数据最后效果 十、Join查询
可以用一个查询将两个集合当中的相同数据 用关键字进行连接。
举个例子
using System;
using System.Collections.Generic;
using System.Linq;class Person
{public string Name { get; set; }public int Age { get; set; }
}class Person2
{public string Name { get; set; }public int Age { get; set; }
}class Program
{static void Main(string[] args){ListPerson people new ListPerson{new Person { Name 张三, Age 30 },new Person { Name 李四, Age 25 },new Person { Name 老六, Age 35 }};ListPerson2 people2 new ListPerson2{new Person2 { Name 张三三, Age 30 },new Person2 { Name 李四四, Age 25 },new Person2 { Name 老六六, Age 35 }};var Temp from p in people join o in people2 on p.Age equals o.Age select new { BigName p.Name, SmallName o.Name, p.Age }; foreach (var result in Temp){Console.WriteLine(result);}Console.ReadLine();}
} 示例解释 使用LINQ查询语法进行连接操作并选择一些属性进行输出。 var Temp from p in people join o in people2 on p.Age equals o.Age select new { BigName p.Name, SmallName o.Name, p.Age }; 在people和pets这两个对象列表之间通过比较Person类的Age属性和Pet类的Age属性找到相等的项并将Person类的Name属性、Pet类的Name属性以及Person类的Age属性作为结果进行输出。 执行效果