9Linq
什么是Linq?
语言集成查询
Linq的作用?
简化查询,主要用于查询使用
Linq的分类:
Linq to object(数组,list集合) :linq操作内存集合,内存里面的数据
Linq to sql(查询数据库用) : linq操作数据库,数据库里的数据
Linq to xml(查询xml文件) : linq 操作xml
Linq语法
var 返回值=from 变量名 in 数据源(可以是数据库,也可以是集合)
orderby 排序
where 变量名.xx=””
join连接查询
select返回
Linq调用方式
1,通过扩展方式调用
List<Student> StudentsNew2 = Students.Where((a) => { return a.Age >= 20; }).ToList();
2,通过表达式方式
Linq的join方法
1,准备两组数据,一组是学生信息,一组是班级信息,关联字段为班级编号
List<Student> Students = new List<Student>()
{
new Student(){ Id=0,Name="张三",Age=18,ClassId=1 },
new Student(){ Id=1,Name="李四",Age=20,ClassId=2 },
new Student(){ Id=2,Name="王五",Age=16,ClassId=2 },
};
List<StudentClass> ClassList = new List<StudentClass>()
{
new StudentClass(){ ClassId=1,ClassName="C#基础班" },
new StudentClass(){ ClassId=2,ClassName="asp.net班" },
new StudentClass(){ ClassId=3,ClassName="mvc班" },
};
2,通过join根据班级编号来查出学生姓名和班级
1),通过表达式方法调用:
//join时,两表的联系用equals来代替等号
var query = from s in Students
join c in ClassList on s.ClassId equals c.ClassId
select new
{
SId = s.Id,
Name = s.Name,
ClassId = c.ClassId,
ClassName = c.ClassName
};
2),通过扩展方法方式调用
var o = Students.Join(ClassList, (a) => { return a.ClassId; }, (b) => { return b.ClassId; },(a, b) =>
{
return
new
{
name = a.Name,
className = b.ClassName
};
});
不过,通过这种方法调用要分析好参数类型,如:
Linq的常用方法
//用于分页的方法
跳过5条
ClassList.Skip(5);
取前3条
ClassList.Take(3);
用于分组的方法
ClassList.OrderBy();
练习:通过Linq对集合进行筛选排序等
1,创建一个对象集合
List<UserInfo> myList = new List<UserInfo>();
myList.Add(new UserInfo() { name = "李清照", age = 23, address = "宋" });
myList.Add(new UserInfo() { name = "黄月英", age = 18, address = "三国" });
myList.Add(new UserInfo() { name = "黄忠", age = 50, address = "三国" });
myList.Add(new UserInfo() { name = "黄某", age = 27, address = "三国" });
myList.Add(new UserInfo() { name = "黄某", age = 35, address = "三国" });
2,根据姓名查询全部字段
var lq = from u in myList
where u.name == "黄某"
select u;
//将查询结果返回
List<UserInfo> newList = lq.ToList();
3,根据地址查询并排序而且返回两个字段(通过一个新对象来返回)
var lq = from u in myList
orderby u.age
where u.address == "三国"
select new UserInfo()
{
name = u.name,
age = u.age
};
//将查询结果返回
List<UserInfo> newList = lq.ToList();
4,根据姓名模糊查询并按年龄降序排序而且返回两个字段(使用匿名对象返回)
//匿名对象适用于只取数据不传递数据
var lq = from u in myList
orderby u.age descending
where u.name.Contains("黄某")
select new
{
name = u.name,
age = u.age
};
foreach (var item in lq)
{
Console.WriteLine(string.Format("姓名:{0},年龄:{1},地址:", item.name, item.age));
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构