ccruiの博客

ccruiの博客

C# linq语法

147
2022-09-01

linq是什么

LINQ(Language Integrated Query )语言集成查询,是一组用于C#和VB语言的拓展,它允许VB或者C#代码以操作内存数据的方式,查询数据库。

LINQ使用的优点:

  1. 无需复杂学习过程即可上手。
  2. 编写更少代码即可创建完整应用。
  3. 更快开发错误更少的应用程序。
  4. 无需求助奇怪的编程技巧就可合并数据源。
  5. 能够大幅减少过程控制语句的代码块,使代码的可读性和可维护性大幅提高。
  6. 任何对象或数据源都可以定制实现LINQ适配器,为数据交互带来真正方便。

linq 语法

linq语法分为查询语句,类似SQL语法 和方法语法

查询语句:

Int[] nums={1,2,4,5,6,7};//数据源
var list = from a in nums
    where a % 2 == 0
    orderby a descending
    select a; //linq的第一种写法

方法语法:

Int[] nums={1,2,4,5,6,7};//数据源
var list2 = nums
    .Where(a => a % 2 == 0)
    .OrderByDescending(a => a)
    .Select(a => a); //linq的第二种写法

我个人比较喜欢方法语法 故下面的演示代码均采用方法语法书写

语法详解

查询 Where

Int[] nums={1,2,4,5,6,7};//数据源
var list2=nums
    //查询数据源中
    .Where(a => a % 2 == 0)//查询数据源中的偶数

制定Key查询 Select

private List<DataTest> _dataTests = new List<DataTest>()
{
    new DataTest()
    {
        name = "小张",
        age = 18,
        Address = "北京"
    },
    new DataTest()
    {
        name = "小李",
        age = 19,
        Address = "上海"
    },
    new DataTest()
    {
        name = "小王",
        age = 20,
        Address = "北京"
    },
};//数据源
var select = _dataTests.Select(i => i.name);

输出:小张 小李 小王

函数计算 count min max sum

Int[] nums={1,2,4,5,6,7};//数据源
var count= nums.Count();//获取数据源内元素的数量
Int[] nums={1,2,4,5,6,7};//数据源
var min = nums.Min(i => i);//获取数据源内的元素最小值
Int[] nums={1,2,4,5,6,7};//数据源
var sum = nums.Sum(i => i); //求和

排序 OrderBy OrderByDescending

Int[] nums={1,2,4,5,6,7};//数据源
var OrderBy = nums.OrderBy(a => a); //升序
var OrderByDescending = nums.OrderByDescending(a => a); //降序

取第一个满足的数据 First FirstOrDefault

Int[] nums={1,2,4,5,6,7};//数据源
var FirstOrDefault = nums.FirstOrDefault(i => i > 5); //取出第一个大于5的数据 如果没有则返回默认值
var First = nums.First(i => i > 5); //取出第一个大于5的数据

跳过前面的数据 Skip

Int[] nums={1,2,4,5,6,7};//数据源
var a = nums.Skip(2); //跳过前2个元素

输出:4 5 6 7

取前几条数据 Take

Int[] nums={1,2,4,5,6,7};//数据源
var a = nums.Take(4); //取前4条数据

输出:1 2 4 5

分页 Skip - Take

Int[] nums={1,2,4,5,6,7};//数据源
var a = nums
    .Skip(2).Take(2);//取2-4条的数据

输出:4 5

模糊查询 Contains

private List<DataTest> _dataTests = new List<DataTest>()
{
    new DataTest()
    {
        name = "小张",
        age = 18,
        Address = "北京"
    },
    new DataTest()
    {
        name = "小李",
        age = 19,
        Address = "上海"
    }
};//数据源
    
var d = _dataTests.Where(s => s.name.Contains("张"));//模糊查询名称中包含张的数据

输出:名字:小张 年龄:18 地址:北京

分组 GroupBy 遍历 ForEach

private List<DataTest> _dataTests = new List<DataTest>()
{
    new DataTest()
    {
        name = "小张",
        age = 18,
        Address = "北京"
    },
    new DataTest()
    {
        name = "小李",
        age = 19,
        Address = "上海"
    },
    new DataTest()
    {
        name = "小王",
        age = 20,
        Address = "北京"
    },
};//数据源
    
var d = _dataTests.GroupBy(a => a.Address);//分组
//遍历 
d.ToList().ForEach(a =>
{
    Console.WriteLine(a.Key);
    a.ToList().ForEach(b =>
    {
        Console.WriteLine(b.name);
    });
});

输出:北京 小张 小王 上海 小李

参考 博客园 知乎