C# Linq 学会使用,学会自己编写Linq

这篇具有很好参考价值的文章主要介绍了C# Linq 学会使用,学会自己编写Linq。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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}");
    }
}

C# Linq 学会使用,学会自己编写Linq

现在我们用Linq的方式来写

引用Linq的命名空间

using System.Linq;

 引用命名空间之后,我们的list对象,拥有了一个扩展方法,Where

(扩展方法,在之前的博客有专门讲过)

我们现在看看Where怎么用

C# Linq 学会使用,学会自己编写Linq

我们看到Where函数是 需要一个Func的参数 func的参数是我们的数据,返回值是一个bool

C# Linq 学会使用,学会自己编写Linq

 我们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}");
}

结果是只有一条数据符合要求,证明我们的写法都是正确的

C# Linq 学会使用,学会自己编写Linq

 自己编写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,看看效果怎么样

C# 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}");
}

 C# Linq 学会使用,学会自己编写Linq

效果完全一样.但是我们的这个复用性太低了,我们用泛型给它改一下 

  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

到了这里,关于C# Linq 学会使用,学会自己编写Linq的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# Lambda,LINQ

    Lambda表达式和LINQ语句都是C#中用于查询和筛选数据的工具,但它们有一些异同点。 异同点: 1. 语法不同: Lambda表达式是一种匿名函数 ,它可以用于创建委托或表达式树。而LINQ语句是一种查询语句,它使用特定的和语法来查询数据。 2. 功能不同: Lambda表达式可以用于

    2024年02月09日
    浏览(309)
  • C# Linq 详解二

    目录 概述 七、OrderBy  八、OrderByDescending 九、Skip 十、Take 十一、Any 十二、All C# Linq 文档(一) 1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault C# Linq 文档(二) 1.OrderBy ,2.OrderByDescending,3.Skip,4.Take,5.Any,6.All C# Linq 文档(三) 1.Sum / Min / Max / Average,2.Dist

    2024年02月16日
    浏览(30)
  • C# LINQ,SQL

    C#中的LINQ和SQL都是用于查询数据的工具,但它们有以下异同点: 异同点: 1. LINQ和SQL都可以用于查询数据,但LINQ是在C#中使用的语言集成查询,而SQL是一种独立的查询语言。 2. LINQ和SQL都支持基本的查询操作,如选择、过滤、排序和分组。 3. LINQ和SQL都支持连接多个表,但LI

    2024年02月10日
    浏览(27)
  • C#中的LINQ

    一:什么是LINQ LINQ代表语言集成查询,是.net框架的扩展,它允许我们用SQL查询数据库的方式来查询数据的集合 二:LINQ延迟查询的特性 延迟查询是指查询操作并不是在定义的时候执行,而是在遍历集合中的数据时才执行 因为作为yield迭代器的主体,只有使用foreach遍历执行到

    2023年04月09日
    浏览(31)
  • C# Linq 详解四

    目录 概述 二十、SelectMany 二十一、Aggregate 二十二、DistinctBy 二十三、Reverse 二十四、SequenceEqual 二十五、Zip 二十六、SkipWhile  二十七、TakeWhile C# Linq 文档(一) 1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault C# Linq 文档(二) 1.OrderBy ,2.OrderByDescending,3.Skip,

    2024年02月16日
    浏览(26)
  • C# Linq 详解一

    目录 一、概述 二、Where 三、Select 四、GroupBy 五、First / FirstOrDefault 六、Last / LastOrDefault C# Linq 文档(一) 1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault C# Linq 文档(二) 1.OrderBy, 2.OrderByDescending,3.Skip,4.Take,5.Any,6.All C# Linq 文档(三) 1.Sum / Min / Max / Av

    2024年02月16日
    浏览(27)
  • C# Linq 详解三

    目录 概述 十三、Sum / Min / Max / Average 十四、Distinct 十五、Concat 十六、Join 十七、ToList  十八、ToArray 十九、ToDictionary C# Linq 文档(一) 1.Where,2.Select,3.GroupBy,4.First / FirstOrDefault,5.Last / LastOrDefault C# Linq 文档(二) 1.OrderBy ,2.OrderByDescending,3.Skip,4.Take,5.Any,6.All C# Linq 文

    2024年02月16日
    浏览(23)
  • 【C# 基础精讲】LINQ 基础

    LINQ(Language Integrated Query)是一项强大的C#语言特性,它使数据查询和操作变得更加简洁、灵活和可读性强。通过使用LINQ,您可以使用类似SQL的语法来查询各种数据源,如集合、数组、数据库等。本文将介绍LINQ的基础概念、常见的LINQ操作和示例,以及如何在C#中利用LINQ进行数

    2024年02月12日
    浏览(27)
  • C#高级编程 Linq介绍

    本文对C#高级编程部分的Linq查询进行介绍 目录 一、Linq起源 二 LINQ 操作组成 2.1数据源 2.2查询 3.3查询执行

    2024年02月11日
    浏览(30)
  • C#基础--Lambda和LINQ

    在.NetFramewok的不同版本都有不同的样子;在.NetCore下也都是支持的; 1.1 .Netframework1.0/1.1时代 1.2 .NetFramework2.0 匿名方法 增加了一个delegate, 可以访问到除了参数以外的局部变量 1.3 .NetFramework3.0 前期 去掉了delegate,添加了一个= goes to 1.4 .NetFramework3.0 后期 去掉了匿名

    2024年02月17日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包