Linq我暂时理解为,一种内置的非常方便的数据查询的工具
使用
我们先学习它的使用
//数据类
public class DataTest
{
/// <summary>
/// 编号
/// </summary>
public int id;
/// <summary>
/// 名字
/// </summary>
public string name;
/// <summary>
/// 介绍
/// </summary>
public string describe;
/// <summary>
/// 年龄
/// </summary>
public int age;
}
//新建了一个List数据,用来测试数据查询
List<DataTest> dataTests = new List<DataTest>()
{
new DataTest(){
id = 0,
name = "一",
describe ="介绍",
age = 10
},
new DataTest(){
id = 1,
name = "二",
describe ="介绍",
age = 20
},
new DataTest(){
id = 2,
name = "三",
describe ="介绍",
age = 30
},
new DataTest(){
id = 3,
name = "四",
describe ="介绍",
age = 40
},
new DataTest(){
id = 4,
name = "五",
describe ="介绍",
age = 50
},
new DataTest(){
id = 5,
name = "六",
describe ="介绍",
age = 60
},
};
//现在定义一个需求,需要查出id>2的数据
我们一般的写法,应该是foreach
Console.WriteLine("**************foreach遍历*****************");
foreach (var item in dataTests)
{
if (item.id > 2) {
Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
}
}
现在我们用Linq的方式来写
引用Linq的命名空间
using System.Linq;
引用命名空间之后,我们的list对象,拥有了一个扩展方法,Where
(扩展方法,在之前的博客有专门讲过)
我们现在看看Where怎么用
我们看到Where函数是 需要一个Func的参数 func的参数是我们的数据,返回值是一个bool
我们F12 查看,Func类的介绍,防止你们这一步看不懂了
Linq扩展方法写法
我们用Lambda表达式来写的话,就是这个样子的
(Lambda表达式,在之前的博客也有专门讲过)
var list = dataTests.Where(d => d.id > 2);
"匿名函数的写法,熟练的同学用上面这种方式写,更简洁"
//var list = dataTests.Where((DataTest d)=> { return d.id > 2; });
//var list = dataTests.Where(delegate (DataTest d){ return d.id > 2; });
"上面这一步,就已经取出我们需要的值, 下面这个循环只做输出用"
foreach (var item in list)
{
Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
}
现在我们改变一下需求,用Linq的别的写法age < 30同时ID不等于0
Linq关键字写法
这个写法应该学过数据库的同学,应该更容易理解
var list = from d in dataTests
where d.age < 30 && d.id != 0
select d;
foreach (var item in list)
{
Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
}
结果是只有一条数据符合要求,证明我们的写法都是正确的
自己编写Linq
为了方便理解,我们自己也写一个同样功能的Linq
这里看不懂的还是要回去看看扩展方法那一节
public static class Extension
{
public static List<DataTest> MyWhere(this List<DataTest> resource ,Func<DataTest,bool> func)
{
var list = new List<DataTest>();
foreach (var item in resource)
{
if (func(item)) {
list.Add(item);
}
}
return list;
}
}
//其实Linq就是把我们要写的循环封装了
我们现在使用自己写的Linq,看看效果怎么样
var list = dataTests.MyWhere((d)=> d.age < 30 && d.id != 0);
foreach (var item in list)
{
Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
}
效果完全一样.但是我们的这个复用性太低了,我们用泛型给它改一下
public static List<T> MyWhereCommon<T>(this List<T> resource, Func<T, bool> func)
{
var list = new List<T>();
foreach (var item in resource)
{
if (func(item))
{
list.Add(item);
}
}
return list;
}
var list = dataTests.MyWhereCommon((d)=> d.age < 30 && d.id != 0);
foreach (var item in list)
{
Console.WriteLine($"id:{item.id} name:{item.name} age:{item.age}");
}
用法没变,但是我们别的集合也可以通用了文章来源:https://www.toymoban.com/news/detail-459819.html
当然,举一反三,大家可以可以通过这个写法,写出更多适合需求的工具文章来源地址https://www.toymoban.com/news/detail-459819.html
到了这里,关于C# Linq 学会使用,学会自己编写Linq的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!