linq 3 Join,以及其他常用的方法

多表连接查询

先新建一个班级类,初始化数据

    public class StudentClass
    {
        public int ClassId { get; set; }
        public string ClassName { get; set; }
    }

            List<StudentClass> studentClasses = new List<StudentClass>() { 
            new StudentClass()
            {
                ClassId=101,
                ClassName="实验班"
            },
            new StudentClass()
            {
                ClassId=102,
                ClassName="普通版"
            },
            new StudentClass()
            {
                ClassId=103,
                ClassName="辣鸡班"
            }
            };

这里我就不新建结果类了,直接用匿名类,用表达式的方式查询,这样提取出了学生的姓名和班级名

 var query = (from c in studentClasses
                         join s in students on c.ClassId equals s.ClassId
                         select new { StudentName = s.Name, ClassName = c.ClassName }).ToList();

循环输出一下

 

 

 

当然也可以用官方方法

            var querynew = studentClasses.Join(students, c => c.ClassId, s => s.ClassId, (c, s) => new
            {
                StudentName = s.Name,
                ClassName = c.ClassName
            }).ToList() ;

这个看上去就不如表达式直观了,这里c表示studentClasses,s表示students,第一个参数 students表示用哪个集合跟studentClasses关联,第二,三个参数表示主外键关联项,第四个参数是委托,定义返回的内容。

 

左连接

有时候我们要关联的表没数据,但是主表又要显示部分数据,可以左连接

这里我直接用以前写过的代码,不是示例,但是意思是到位的。

简单说就是给右表一个新的别名,同时填充null值,注意select的话用的是新的别名,不是右表的别名。

var preItems = (from a in preBrands
                                    join b in preHotSellIndexes
                                    on a.Id equals b.TypeId
                                    into tempTabel
                                    from temp in tempTabel.DefaultIfEmpty()
                                    select new
                                    {
                                        a.Id,
                                        a.Name,
                                        a.Desc,
                                        a.UpdateTime,
                                        temp.TmallIndex,
                                        temp.MtIndex,
                                        temp.EleIndex,
                                        temp.JdIndex
                                    });

 

 


这里再介绍几个常用的方法

skip,take,通常都是联合使用,用来取前几条,以及分页

skip跳过多少条,take获取前多少条

 var query3 = students.Skip(2).Take(3);

基本上数据库有的,这里都有。

 

posted @ 2021-03-30 18:42  luytest  阅读(72)  评论(0编辑  收藏  举报