本来不支持 IQueryable 主要出于使用习惯的考虑,若是继承 IQueryable,编写代码的智能总会提示出现一堆你不想使用的方法(对不起,我有强迫症),IQueryable 自身提供了一堆无法实现的方法,还有外部入侵的扩展方法,严重影响编码体验。以下图:html
原觉得必须实现 IQueryable 才能够实现,结果一次惊喜,原来只要有对应的方法就成。sql
虽然支持了,可是仍是推荐使用【链式 + lambda】 !!!编码
此次功能更新,ISelect 增长了 5个方法,对【链式 + lambda】的用户可能会形成少量影响,我在注释上标明了,以下图:code
特别是 .Select(),原先没有支持,该功能与 ToList(a => new Dto{}) 合并实现的。htm
须要避免一下坑:blog
若是必定要使用 .Select() 方法,请务必在 .ToList() 以前调用它;继承
请减小图中方法在【链式 + labmda】模式下的使用;事务
全部 ISelect 均可以使用 linq to sql,包括 Repository、DbContext;get
var t1 = ( from a in fsql.Select<Student>() where a.id == item.id select a ).ToList();
var t1 = ( from a in fsql.Select<Student>() where a.id == item.id select new { a.id } ).ToList();
var t1 = ( from a in fsql.Select<Student>() where a.id == item.id select new { a.id, a.name, testsub = new { time = a.age > 10 ? "大于" : "小于或等于" } } ).ToList();
var t1 = ( from a in fsql.Select<Student>() join b in fsql.Select<School>() on a.id equals b.StudentId select a ).ToList(); var t2 = ( from a in fsql.Select<Student>() join b in fsql.Select<School>() on a.id equals b.StudentId select new { a.id, bid = b.id } ).ToList(); var t3 = ( from a in fsql.Select<Student>() join b in fsql.Select<School>() on a.id equals b.StudentId where a.id == item.id select new { a.id, bid = b.id } ).ToList();
var t1 = ( from a in fsql.Select<Student>() join b in fsql.Select<School>() on a.id equals b.StudentId into temp from tc in temp.DefaultIfEmpty() select a ).ToList(); var t2 = ( from a in fsql.Select<Student>() join b in fsql.Select<School>() on a.id equals b.StudentId into temp from tc in temp.DefaultIfEmpty() select new { a.id, bid = tc.id } ).ToList(); var t3 = ( from a in fsql.Select<Student>() join b in fsql.Select<School>() on a.id equals b.StudentId into temp from tc in temp.DefaultIfEmpty() where a.id == item.id select new { a.id, bid = tc.id } ).ToList();
var t1 = ( from a in fsql.Select<Student>() from b in fsql.Select<School>() where a.id == b.StudentId select a ).ToList(); var t2 = ( from a in fsql.Select<Student>() from b in fsql.Select<School>() where a.id == b.StudentId select new { a.id, bid = b.id } ).ToList(); var t3 = ( from a in fsql.Select<Student>() from b in fsql.Select<School>() where a.id == b.StudentId where a.id == item.id select new { a.id, bid = b.id } ).ToList();
var t1 = ( from a in fsql.Select<Student>() where a.id == item.id group a by new {a.id, a.name } into g select new { g.Key.id, g.Key.name, cou = g.Count(), avg = g.Avg(g.Value.age), sum = g.Sum(g.Value.age), max = g.Max(g.Value.age), min = g.Min(g.Value.age) } ).ToList();
(一)入门it
(二十四)Linq To Sql 语法使用介绍