ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Linq 下的扩展方法太少了,您期待的 MoreLinq 来啦

2020-09-07 10:02:16  阅读:325  来源: 互联网

标签:OrderTitle MoreLinq list UserID 太少 Linq var new expressions


一:背景

1. 讲故事

前几天看同事在用 linq 给内存中的两个 model 做左连接,用过的朋友都知道,你一定少不了一个叫做 DefaultIfEmpty 函数,这玩意吧,本来很流畅的 from...in...join, 突然搞进来这么一个函数,真的是恶心他妈给恶心开门,恶心到家了,简化后的代码如下:


    class User
    {
        public int UserID { get; set; }
        public string Email { get; set; }
    }

    class Order
    {
        public int OrderID { get; set; }
        public string OrderTitle { get; set; }
        public int UserID { get; set; }
    }

    static void Main(string[] args)
    {
         var userList = new List<User>()
            {
                new User(){ UserID=1, Email="333@qq.com"},
                new User(){ UserID=2, Email="444@qq.com"},
            };

            var orderList = new List<Order>()
            {
                new Order(){ OrderID=1, OrderTitle="订单1", UserID=1},
                new Order(){ OrderID=2, OrderTitle="订单2", UserID=1}
            };

            var query = from u in userList
                        join o in orderList on u.UserID equals o.UserID into grp
                        from item in grp.DefaultIfEmpty()
                        select new { UserID = u.UserID, OrderTitle = item?.OrderTitle };       
    }    

之所以出现这个情况是因为不管是 查询关键词 还是 扩展方法,都并没有直接对 leftjoin 和 rightjoin 底层支持,只能通过变通的方式去实现,这就很尴尬了,比如说上面的这段代码,你很难在多天之后还能准确理解这里的 DefaultIfEmpty 是用来干嘛的,那现在问题的关键在于,有没有什么方法让底层支持或者有可信的第三方帮我封装好,还真巧,在 github 上 还真有一个 morelinq 项目:https://github.com/morelinq/MoreLINQ,看 md 是给 Enumerable 扩展了 60,70 个方法,如虎添翼呀,接下来一起来探索下吧。

二: MoreLinq 下的探索

1. 安装

安装非常简单,用 nuget 跑一下 Install-Package morelinq -Version 3.3.2 即可。

2. LeftJoin / RightJoin / FullJoin

在 morelinq 中就提供了 左外,右边,全连接,这就很

标签:OrderTitle,MoreLinq,list,UserID,太少,Linq,var,new,expressions
来源: https://www.cnblogs.com/huangxincheng/p/13625238.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有