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);
基本上数据库有的,这里都有。