小Q的博客

  • 首页
  • net编程
    • 产品和框架
    • 开发实例
    • 经验技巧
    • 开源组件
  • wp独立站
  • 自媒体
  • 日记本
  • 工具箱
每个程序员,都应该有一个自己的博客站
  1. 首页
  2. net编程
  3. 开源组件
  4. 正文

微软的Linq方法太少?用MoreLinq试试,多到用不过来

2022年12月12日 1042点热度 1人点赞 0条评论

如果你用Linq语法进行多表关联,就少不了下面这种语法。说实话,不清楚微软当时这样架构有什么想法或好处,总是看着很别扭。像SQL语句那样直接LeftJoin不香吗?可能是我境界不够。还是操作List对象时,也总感觉少了点什么。比如将数据插入到源数据的第n个位置,好像一句话不太能搞定。不过,用下面这种组件,这些问题都能解决。而且它提供的方法,千奇百怪的

Nuget搜索:MoreLinq

Table of Contents

Toggle
  • LeftJoin方法
  • ToDataTable
  • Shuffle
  • Insert、Backsert
  • Intersect、Union
  • AtLeast
  • ToLookup
  • Transpose

LeftJoin方法

这个组件同时也支持RightJoin和FullJoin
怎么样,一句链式就搞定了,而且代码还非常好理解。
第一个参数:join 集合
第二个参数:source 集合的关联 id
第三个参数:join 集合的关联 id
第四个参数:source 存在,join不存在 应该返回的 model 架构
第五个参数:source,join 都存在 应该返回的 model 架构

LeftJoin示例

ToDataTable

List转为DataTable,这个方法还是很实用的。

//转DataTable
DataTable dtBlog5 = listBlog.ToDataTable();

 

Shuffle

元素顺序打乱再重新返回,相当于重新洗牌

var list21 = new List<int>() { 1, 3, 5, 7, 9, 11, 12 };
var query21 = list21.OrderBy(m => Guid.NewGuid());
Console.WriteLine(string.Join(",", query21));

var list22 = new List<int>() { 1, 3, 5, 7, 9, 11, 12 };
var query22 = list22.Shuffle();
Console.WriteLine(string.Join(",", query22));

Insert、Backsert

Insert就是在某个元素后面插入子List<T>;Backsert这个就有些意思了,调试后才知道,它是从后面在第某个元素后面插入子List<T>

//在某个位置插入多个记录
List<int> list3 = new List<int>() { 1, 3, 5, 7, 9, 11, 12 };
var query = list3.Insert(new List<int>() { 8 }, 4);
Console.WriteLine(string.Join(",", query));

//从后面插入List数据
List<int> list61 = new List<int>() { 1, 3, 5, 7, 9, 9, 7, };
List<int> list62 = new List<int>() { 11, 12, 5 };
List<int> list6Res1 = list61.Backsert(list62, 1).ToList();

Intersect、Union

分别获取2个List<T>的交集与合集,就是并与或的关系

//获取2个List的交集
List<int> list6Res2 = list61.Intersect(list62).ToList();

//获取2个List的合集
var list6Res6 = list61.Union(list62).ToList();

AtLeast

这个方法意思是判断List的个数,是否在参数范围内

//判断数据个数是否在参数里
bool b641 = list61.AtLeast(3);
bool b642 = list61.AtLeast(30);

Batch
相当于分页,参数是每页多少条数据

//相当于分页
List<IEnumerable<int>> list6Res3 = list61.Batch(3).ToList();

 

ToLookup

这个方法相当于分组,然后再把相同的存放在一起。类似Dictionary<int,List<int>>

//分组,相同的分成一组
var list6Res5 = list61.ToLookup(c => c.ToString().ToUpper());

Transpose

字面含义是行转列,实际也确实是行转列。就是感觉对,又好像不对。
奇怪的行转列

看下MoreLinq提供的方法,真的很多,也很实用

MoreLinq的提供的N多方法

相关阅读

c#中EntityFramework连接MySql数据示例 支持Update部分字段

Newtonsoft的高级玩法,让你的json字符串与众不同

标签: LeftJoin Linq语法 MoreLinq组件 左连接
最后更新:2022年12月12日

小Q

80后中年不油腻大叔,喜欢编写代码、打羽毛球、做木制玩具。目前定居浙江杭州

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

COPYRIGHT © 2022 小Q的博客. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

浙ICP备2022019157号-2