C#中LINQ的使用知多少?LINQ常功能整理,实例源代码解析
LINQ(Language-Integrated Query)是C#语言中的一个强大的查询技术,它提供了一种统一的查询语法,可以用于查询和操作各种数据源,包括集合、数据库、XML等。下面详细描述了LINQ的20个功能点,并提供了相应的源代码。
- 查询集合中的所有元素:
int[] numbers = { 1, 2, 3, 4, 5 };
var query = from num in numbers
select num;
foreach (var num in query)
{
Console.WriteLine(num);
}
- 使用条件过滤集合中的元素:
int[] numbers = { 1, 2, 3, 4, 5 };
var query = from num in numbers
where num % 2 == 0
select num;
foreach (var num in query)
{
Console.WriteLine(num);
}
- 对集合中的元素进行排序:
int[] numbers = { 5, 3, 1, 4, 2 };
var query = from num in numbers
orderby num
select num;
foreach (var num in query)
{
Console.WriteLine(num);
}
- 对集合中的元素进行分组:
string[] names = { "Alice", "Bob", "Charlie", "David", "Eve" };
var query = from name in names
group name by name[0];
foreach (var group in query)
{
Console.WriteLine(group.Key);
foreach (var name in group)
{
Console.WriteLine(name);
}
}
- 对集合中的元素进行投影:
string[] names = { "Alice", "Bob", "Charlie", "David", "Eve" };
var query = from name in names
select name.Length;
foreach (var length in query)
{
Console.WriteLine(length);
}
- 连接两个集合的元素:
string[] names1 = { "Alice", "Bob", "Charlie" };
string[] names2 = { "David", "Eve", "Frank" };
var query = from name1 in names1
join name2 in names2 on name1[0] equals name2[0]
select new { Name1 = name1, Name2 = name2 };
foreach (var pair in query)
{
Console.WriteLine($"{pair.Name1}, {pair.Name2}");
}
- 使用LINQ查询数据库:
using (var dbContext = new MyDbContext())
{
var query = from user in dbContext.Users
where user.Age > 18
select user;
foreach (var user in query)
{
Console.WriteLine(user.Name);
}
}
- 使用LINQ查询XML文档:
XDocument doc = XDocument.Load("data.xml");
var query = from element in doc.Descendants("book")
where (int)element.Element("price") > 10
select element.Element("title").Value;
foreach (var title in query)
{
Console.WriteLine(title);
}
- 使用LINQ查询JSON数据:
string json = File.ReadAllText("data.json");
var data = JsonConvert.DeserializeObject<List<Person>>(json);
var query = from person in data
where person.Age > 18
select person.Name;
foreach (var name in query)
{
Console.WriteLine(name);
}
- 使用LINQ查询并转换结果:
int[] numbers = { 1, 2, 3, 4, 5 };
var query = from num in numbers
where num % 2 == 0
select num * 2;
foreach (var num in query)
{
Console.WriteLine(num);
}
- 使用LINQ查询返回匿名类型:
string[] names = { "Alice", "Bob", "Charlie", "David", "Eve" };
var query = from name in names
select new { Name = name, Length = name.Length };
foreach (var item in query)
{
Console.WriteLine($"{item.Name}, {item.Length}");
}
- 使用LINQ查询返回自定义类型:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
}
List<Person> people = new List<Person>
{
new Person { Name = "Alice", Age = 20 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 30 }
};
var query = from person in people
where person.Age > 25
select person.Name;
foreach (var name in query)
{
Console.WriteLine(name);
}
- 使用LINQ查询返回集合:
int[] numbers = { 1, 2, 3, 4, 5 };
var query = from num in numbers
where num % 2 == 0
select num * 2;
List<int> result = query.ToList();
foreach (var num in result)
{
Console.WriteLine(num);
}
- 使用LINQ进行分页查询:
int pageNumber = 2;
int pageSize = 10;
var query = from product in dbContext.Products
orderby product.Name
select product;
var page = query.Skip((pageNumber - 1) * pageSize).Take(pageSize);
foreach (var product in page)
{
Console.WriteLine(product.Name);
}
- 使用LINQ进行聚合操作:
int[] numbers = { 1, 2, 3, 4, 5 };
int sum = numbers.Sum();
int max = numbers.Max();
int min = numbers.Min();
double average = numbers.Average();
Console.WriteLine($"Sum: {sum}");
Console.WriteLine($"Max: {max}");
Console.WriteLine($"Min: {min}");
Console.WriteLine($"Average: {average}");
- 使用LINQ进行集合的交集操作:
int[] numbers1 = { 1, 2, 3, 4, 5 };
int[] numbers2 = { 4, 5, 6, 7, 8 };
var query = numbers1.Intersect(numbers2);
foreach (var num in query)
{
Console.WriteLine(num);
}
- 使用LINQ进行集合的并集操作:
int[] numbers1 = { 1, 2, 3, 4, 5 };
int[] numbers2 = { 4, 5, 6, 7, 8 };
var query = numbers1.Union(numbers2);
foreach (var num in query)
{
Console.WriteLine(num);
}
- 使用LINQ进行集合的差集操作:
int[] numbers1 = { 1, 2, 3, 4, 5 };
int[] numbers2 = { 4, 5, 6, 7, 8 };
var query = numbers1.Except(numbers2);
foreach (var num in query)
{
Console.WriteLine(num);
}
- 使用LINQ进行集合的连接操作:
var query = from order in dbContext.Orders
join customer in dbContext.Customers on order.CustomerId equals customer.Id
select new { OrderId = order.Id, CustomerName = customer.Name };
foreach (var result in query)
{
Console.WriteLine($"{result.OrderId}, {result.CustomerName}");
}
- 使用LINQ进行集合的逆序操作:
int[] numbers = { 1, 2, 3, 4, 5 };
var query = numbers.Reverse();
foreach (var num in query)
{
Console.WriteLine(num);
}
以上是20个常用的LINQ功能点的示例代码,它们展示了LINQ在C#中的强大查询能力和灵活性。通过使用LINQ,开发人员可以更加方便地进行各种数据操作和查询,提高代码的可读性和开发效率。

C#中LINQ的使用知多少?LINQ常功能整理,实例源代码解析的更多相关文章
- 使用具体解释及源代码解析Android中的Adapter、BaseAdapter、ArrayAdapter、SimpleAdapter和SimpleCursorAdapter
Adapter相当于一个数据源,能够给AdapterView提供数据.并依据数据创建相应的UI.能够通过调用AdapterView的setAdapter方法使得AdapterView将Adapter作 ...
- c#搭建服务端 简单中最高效的数据操作Linq (4)
.NET F 3.5之后提出的linq to sql 概念,大大的简化了对于数据对象的操作,可以通过简单的语法直接操作数据对象,如List,Linq to sql类 等等. 1.使用Linq to s ...
- Linq之旅:Linq入门详解(Linq to Objects)
示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...
- linq世界走一走(LINQ TO SQL)
前言:作为linq的一个组件,同时作为ADO.NET的一个组成部分,LINQ TO SQL提供了将关系数据映射为对象的运行时基础结构. LINQ TO SQL是通过将关系数据库对象的数据模型(如一个数 ...
- Linq世界走一走(LINQ TO XML)
前言:Linq to xml是一种使用XML的新方法.从本质上来说,它采用了多种当前使用的XML处理技术,如DOM和XPath,并直接在.NET Framework内将它们组合为一个单一的编程接口.L ...
- LINQ之路11:LINQ Operators之过滤(Filtering)
在本系列博客前面的篇章中,已经对LINQ的作用.C# 3.0为LINQ提供的新特性,还有几种典型的LINQ技术:LINQ to Objects.LINQ to SQL.Entity Framework ...
- Linq之旅:Linq入门详解(Linq to Objects)【转】
http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html Linq之旅:Linq入门详解(Linq to Objects) 示例代码下载:Linq之 ...
- Linq之旅:Linq入门详解(Linq to Objects)(转)
http://www.cnblogs.com/heyuquan/p/Linq-to-Objects.html 示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细 ...
- LINQ之路 9:LINQ to SQL 和 Entity Framework(上)
在上一篇中,我们从理论和概念上详细的了解了LINQ的第二种架构“解释查询”.在这接下来的二个篇章中,我们将使用LINQ to SQL和Entity Framework来实践“解释查询”,学习这些技术的 ...
- 白话LINQ系列1---什么是LINQ?
一.本系列目标 1.理解LINQ: 2.能写得复杂的LINQ语句(比如:动态查询): 3.理解表达式树及相关概念: 4.熟练运用LINQ写出优美的代码(希望一起努力,最终达到): 二.LINQ为何物? ...
随机推荐
- 调研capacitor兼容openharmony平台可行性
团队可能需要对开源的 capacitor 跨平台框架进行扩展,以生产支持 OpenHarmony 平台的应用,在此调研可行性.实现路径和预期工作量. 可行性分析 在验证 capacitor 是否可以将 ...
- 三维模型OSGB格式轻量化压缩必要性分析
三维模型OSGB格式轻量化压缩必要性分析 三维模型是计算机图形学和视觉效果等领域的重要应用之一.然而,由于三维模型通常包含大量的几何信息.纹理信息和其他元素,导致其占用的存储空间和计算资源非常巨大.为 ...
- SQL技巧:WITH RECURSIVE递归运算
SQL技巧:WITH RECURSIVE递归运算 1.累加求和运算 -- 计算递归 WITH RECURSIVE t(n) AS ( VALUES (1) UNION ALL SE ...
- 产品代码都给你看了,可别再说不会DDD(四):代码工程结构
这是一个讲解DDD落地的文章系列,作者是<实现领域驱动设计>的译者滕云.本文章系列以一个真实的并已成功上线的软件项目--码如云(https://www.mryqr.com)为例,系统性地讲 ...
- QA|如何实现一个函数读取1-9按钮?|网页计算器自动化测试实战
如何实现一个函数读取1-9按钮? 如何实现一个根据我们Json存的数字,自动选取对应按钮点击,并且点击对应算法? 首先我们肯定不能给每个元素都写一个函数吧,毕竟挺多,而且如果这样写了,那加减乘除都要分 ...
- ffmpeg 在xp和server2003/2008/2012上修复无法定位GetNumaNodeProcessorMaskEx的问题
问题 在给开发一个手机视频网站时需要用到ffmpeg截取视频缩略图, 把项目提交到服务器(server2003/ server2008)上时, 发现在调用命令时会出现错误"无法定位GetNu ...
- 2023年了,复习了一下spring boot配置使用mongodb
前言 MongoDB是一个基于分布式文件存储的开源数据库系统,使用C++语言编写.它是一个介于关系数据库和非关系数据库之间的产品,具有类似关系数据库的功能,但又有一些非关系数据库的特点.MongoDB ...
- 「ceoi 2009」harbingers
link. 朴素 dp 大约就是 \(f_x=f_y+v_x\times(d_x-d_y)+s_x\),\(y\) 是 \(x\) 的祖先.这个式子可以斜率优化,在以 \(d_y\) 为横坐标,\(f ...
- Teamcenter RAC 开发之《PlaceHolder》
背景 做个swing表单,有时候想实现一些网页input标签的placeHolder提示,可能本人写vue or html写多,对某些细节有强迫症,所以找小下资料 实现方法(Swingx) 看源码
- 国庆微信头像DIY:轻松打造个性化头像
前言 国庆节马上要到了,今天就教你如何从0到1使用canvas生成国庆风微信头像. 本文包含以下内容: vue3项目搭建,需求分析 canvas合成图片原理 github自动化部署 开发过程遇到的问题 ...