如果你用Linq语法进行多表关联,就少不了下面这种语法。说实话,不清楚微软当时这样架构有什么想法或好处,总是看着很别扭。像SQL语句那样直接LeftJoin不香吗?可能是我境界不够。还是操作List对象时,也总感觉少了点什么。比如将数据插入到源数据的第n个位置,好像一句话不太能搞定。不过,用下面这种组件,这些问题都能解决。而且它提供的方法,千奇百怪的
LeftJoin方法
这个组件同时也支持RightJoin和FullJoin
怎么样,一句链式就搞定了,而且代码还非常好理解。
第一个参数:join 集合
第二个参数:source 集合的关联 id
第三个参数:join 集合的关联 id
第四个参数:source 存在,join不存在 应该返回的 model 架构
第五个参数:source,join 都存在 应该返回的 model 架构
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提供的方法,真的很多,也很实用
相关阅读
文章评论