LINQ 之 使用 LINQ 进行数据转换
程序员文章站
2022-04-15 14:13:22
...
语言集成查询 (LINQ) 不仅可用于检索数据,而且还是一个功能强大的数据转换工具。通过使用 LINQ 查询,您可以将源序列用作输入,并采用多种方式修改它以创建新的输出序列。您可以通过排序和分组来修改该序列,而不必修改元素本身。但是,LINQ 查询的最强大的功能是能够创建新类型。这一功能在 select 子句中实现。 例如,可以执行下列任务:
3.1 将多个输入联接到一个输出序列
class Student
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
public List<int> Scores { get; set; }
}
class Teacher
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
学生和老师两个类
internal class Program
{
private static void Main(string[] args)
{
//创建第一个数据源
var students = new List<Student>()
{
new Student()
{
Age = 23,
City = "广州",
Name = "小C",
Scores = new List<int>(){85,88,83,97}
},
new Student()
{
Age = 18,
City = "广西",
Name = "小明",
Scores = new List<int>(){86,78,85,90}
},
new Student()
{
Age = 33,
City = "梦里",
Name = "小叁",
Scores = new List<int>(){86,68,73,97}
}
};
//创建第二个数据源
var teachers = new List<Teacher>()
{
new Teacher()
{
Age = 35,
City = "梦里",
Name = "啵哆"
},
new Teacher()
{
Age = 28,
City = "云南",
Name = "小红"
},
new Teacher()
{
Age = 38,
City = "河南",
Name = "丽丽"
}
};
//创建查询
var peopleInDreams = (from student in students
where student.City == "梦里"
select student.Name)
.Concat(from teacher in teachers
where teacher.City == "梦里"
select teacher.Name);
//执行查询
foreach (var person in peopleInDreams)
{
Console.WriteLine(person);
}
Console.Read();
}
}
控制台输出代码。
3.2 选择各个源元素的子集
1. 若要只选择源元素的一个成员,请使用点运算。
var query = from cust in Customers
select cust.City;
2. 若要创建包含源元素的多个属性的元素,可以使用具有命名对象或匿名类型的对象初始值设定项。
var query = from cust in Customer
select new {Name = cust.Name, City = cust.City};
3.3 将内存中的对象转换为 XML
//创建数据源
var students = new List<Student>()
{
new Student()
{
Age = 18,
Name = "小A",
Scores = new List<int>() {88,85,74,66 }
},
new Student()
{
Age = 35,
Name = "小B",
Scores = new List<int>() {88,85,74,66 }
},
new Student()
{
Age = 28,
Name = "小啥",
Scores = new List<int>() {88,85,74,66 }
}
};
//创建查询
var studentsToXml = new XElement("Root",
from student in students
let x = $"{student.Scores[0]},{student.Scores[1]},{student.Scores[2]},{student.Scores[3]}"
select new XElement("student",
new XElement("Name", student.Name),
new XElement("Age", student.Age),
new XElement("Scores", x))
);
//执行查询
Console.WriteLine(studentsToXml);
3.4 对源元素执行操作
输出序列可能不包含源序列的任何元素或元素属性。输出可能是通过将源元素用作输入参数计算出的值的序列。
//数据源
double[] radii = {1, 2, 3};
//创建查询
var query = from radius in radii
select $"{radius * radius * 3.14}";
//执行查询
foreach (var i in query)
{
Console.WriteLine(i);
}
下一篇: 有关JDBC的简单实例分享
推荐阅读
-
如何使用LinQ To Object把数组或DataTable中的数据进行向上汇总
-
AngularJS实践之使用NgModelController进行数据绑定
-
Excel VBA之删除没有数据的行 使用CountA是否等于0进行判断
-
C#程序中使用LINQ to XML来查询XML格式数据的实例
-
C#操作LINQ to SQL组件进行数据库建模的基本教程
-
从零开始搭建前后端分离的NetCore2.2(EF Core CodeFirst+Autofac)+Vue的项目框架之六使用过滤器进行全局请求数据验证
-
使用sklearn进行数据预处理之Binarizer,LabelEncoder,LabelBinarizer,OneHotEncoder
-
Nano Framework之添加H2数据库并使用JDBC进行持久层开发
-
LINQ简单使用与XML的转换
-
C#使用Linq to csv读取.csv文件数据