当前位置:网站首页 / .NET CORE / 正文

ay的C#8.0和net5高级编程笔记12-使用LINQ查询和操作数据

时间:2021年04月27日 | 作者 : aaronyang | 分类 : .NET CORE | 浏览: 256次 | 评论 0

LINQ提供程序,LINQ to Objects, LINQ to Entities, LINQ to XML,LINQ to OData, LINQ to Amazon等

由于本人以前学过了linq,文章系列链接 文章图片已修复

所以本文只列出一些,以前我没写到的LINQ知识

Enumerable类定义了45个以上的扩展方法


扩展方法

First,FirstOrDefault,Last,LastOrDefault

Where
Single SingleOrDefault
ElementAt  ElementAtOrDefault
Select  SelectMany
OrderBy OrderByDescending ThenBy ThenByDescending
Reverse
GroupBy GroupByJoin Join
Skip SkipWhile
Take TakeWhile
Aggregate Average Count LongCount Max Min Sum
All Any Contains
Cast
OfType
Except Intersect Union
Append Concat Prepend
Zip 根据项的位置执行匹配操作
Distinct

To Array ToList ToDictionary ToLookup



Zip前面我没写过,类似Aggregate,把两个给你,你自己怎么决定怎么汇总。

    List<String> list1 = new List<String> { "Hello", "Good", "My " };
            List<String> list2 = new List<String> {"C#", "Day", "Baby" };
            var _list1list2= list1.Zip(list2);
            foreach (var name in _list1list2)
            {
                Console.WriteLine(name);
            }

            foreach (var name in list1.Zip(list2, (l1, l2) => l1 + "  " + l2))
            {
                Console.WriteLine(name);
            }


Zip提供回调,他会把对应index的两个对象传给你,让你处理,然后返回一个新的

image.png
image.png

其他LINQ看我以前的博客 文章系列链接


www.ayjs.net===

使用LINQ和EF Core

继续使用Northwind示例

这块和LINQ to SQL很像

传给你个db对象,里面有表集合,然后利用linq操作集合。

比如Where查找  比如 排序

具体看上一篇博客

对DbSet<T>的操作


点Select拓展方法 返回新的 匿名对象

XX.Select(p=>new { AAA=p.AA,BBB=p.BB });


GroupJoin用法

打开上一篇博客的代码,添加下面代码

        static void GroupJoinCategoryAndProduct()
        {
            using (var db = new NorthWind())
            {
                var logfactory = db.GetService<ILoggerFactory>();
                logfactory.AddProvider(new ConsoleLoggerProvider());

                var querygroup = db.Categories.AsEnumerable().GroupJoin(db.Products, (c) => c.CategoryID, p => p.CategoryID, (c, matchingProduct) => new
                {
                    c.CategoryName,
                    Products = matchingProduct.OrderBy(p => p.ProductName)
                }) ;
                foreach (var item in querygroup)
                {
                    Console.WriteLine(item.CategoryName+" "+item.Products.Count());
                    foreach (var s in item.Products)
                    {
                        Console.WriteLine("\t"+s.ProductName);
                    }
                }
            }
        }

Main方法执行下:

image.png


并行LINQ 是一种使多个线程能够执行LINQ查询的简单方法

更多的下一篇博客介绍,这里简单介绍下

普通linq的代码

         var watch = Stopwatch.StartNew();
            Console.Write("按回车键开始");
            Console.ReadLine();
            watch.Start();
            IEnumerable<int> numbers = Enumerable.Range(1,200_000_000);
            var squares = numbers.Select(n=>n*n).ToArray();
            watch.Stop();
            Console.WriteLine("{0:#,##0} 毫秒",watch.ElapsedMilliseconds);

打开CPU监视器

Win10 打开任务管理器,单击 性能,然后右击cpu,切换到 逻辑处理器

image.png

image.png


对于macOS

启动 Activity Monitor

导航到 View | Update Frequency | Very often(1 sec)

要查看CPU图形 请导航到 Window | CPU History



运行代码,下面的在win10演示


增加AsParallel方法调用

            var squares=numbers.AsParallel().Select(n => n * n).ToArray();

image.png

发现好几个波形都一样了

image.png


创建自己的LINQ拓展方法:

    public static class MyLinqExtension
    {
        public static IEnumerable<T> ProcessSequence<T>(this IEnumerable<T> sequence)
        {
            return sequence;
        }
    }

对this IEnumerable<T>的拓展就行了


还有创建个处理类,  比如

    public class A
    {
        public A Hand1(string para)
        {

            //...其他操作
            return this;
        }

    }

这样也可以实现链式 拓展

总结: 通过此书,目前发现 以前的LINQ在.NET CORE中都可以使用,当然还有些新增的 异步的LINQ


LINQ to Xml知识跟以前一样

LINQ还有些表达式 Expression的知识,感兴趣自己学

===============www.ayjs.net==========

推荐您阅读更多有关于“C#8.0core3,”的文章

猜你喜欢

额 本文暂时没人评论 来添加一个吧

发表评论

必填

选填

选填

必填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

  查看权限

合肥科大智能常年招聘C# .NET CORE,vue前端,JAVA开发,有想换工作的私聊我AY唯一QQ:875556003和AY交流

抖音号:wpfui 工作是wpf,不接活,目前主要折腾maui

AYUI8社区版Github地址:前往获取

杨洋(AaronYang简称AY,安徽六安人)目前是个人,还没公司AY唯一QQ:875556003和AY交流

高中学历,2010年开始web开发,2015年1月17日开始,兴趣学习研究WPF

声明:AYUI7个人与商用免费,源码可购买。部分DEMO不免费.AY主要靠卖技术服务挣钱

不是从我处购买的ayui7源码,我不提供任何技术服务,如果你举报从哪里买的,我可以帮你转正为我的客户,并送demo

查看捐赠

AYUI7.X MVC教程 更新如下:

第一课 第二课 程序加密教程

vs2015 企业版密钥HM6NR-QXX7C-DFW2Y-8B82K-WTYJV

vs2017 企业版密钥NJVYC-BMHX2-G77MM-4XJMR-6Q8QF

标签列表