返回List

List<Student> list = db.Queryable<Student>().ToList();


返回第一个实体

Student item = db.Queryable<Student>().First(it=>it.Id==1);


返回DataTable

DataTable dataTable = db.Queryable<Student>().Select(it => it.Id).ToDataTable();


返回Json

var json = db.Queryable<Student>().ToJson();


返回数组

List<int> listInt=db.Queryable<Student>().Select(it => it.Id).ToList();


返回匿名对象

var dynamic = db.Queryable<Student>().Select<dynamic>().ToList();


返回到新类 

var viewModel = db.Queryable<Student, School, DataTestInfo>((st, sc, di) => new JoinQueryInfos(
        JoinType.Left, st.SchoolId == sc.Id,
        JoinType.Left, st.Name == di.String
    ))
    .Select<ViewModelStudent>().ToList();


多表返回匿名对象

var newDynamic = db.Queryable<Student, School, DataTestInfo>((st, sc, di) => new JoinQueryInfos(
    JoinType.Left, st.SchoolId == sc.Id,
    JoinType.Left, st.Name == di.String
)) .Select((st,sc,di)=>new { name=st.Name,scid=sc.Id }).ToList();


手动返回到新类

var newClass= db.Queryable<Student, School, DataTestInfo>((st, sc, di) => new JoinQueryInfos(
    JoinType.Left, st.SchoolId == sc.Id,
    JoinType.Left, st.Name == di.String
)) .Select((st,sc,di)=>new ClassName{ name=st.Name,scid=sc.Id }).ToList();


多表查一表

var oneClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
    JoinType.Left, o.Id == i.OrderId,
    JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) => c).ToList();


多表返回2表

var twoClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
JoinType.Left, o.Id == i.OrderId,
JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) => new { o,i}).ToList()


返回字典集合

List<Dictionary<string, object>> ListDic = db.Queryable<Student, School, DataTestInfo>((st, sc, di) => new JoinQueryInfos(
JoinType.Left, st.SchoolId == sc.Id,
JoinType.Left, st.Name == di.String
)).Select<ExpandoObject>().ToList().Select(it => it.ToDictionary(x => x.Key, x => x.Value)).ToList(); ;


ORM解析特殊函数

当我们使用Select时候有一个字段用到了特殊的C#函数解析不了,我们可以用Mapper单独对这个字段进行处理,

原理:是Select是用来生成Sql,Mapper是对ToList后的结果进行的转换,所以支持任何C#函数

var newClass = db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
                   JoinType.Left, o.Id == i.OrderId,
                   JoinType.Left, o.CustomId == c.Id
               ))
                .Select((o, i, c) => new ViewOrder {
                    Name =o.Name,  
                    CustomName=c.Name,
                    Id=it.Id//暂时不处理
                })
                .Mapper(it=> {

                    it.Id =  Util.GetNo(it.Id)  ; //这里处理

                }).ToList();

Mapper处理匿名对象需要这么写,需要加上(daynamic)

db.Queryable<Order, OrderItem, Custom>((o, i, c) => new JoinQueryInfos(
    JoinType.Left, o.Id == i.OrderId,
    JoinType.Left, o.CustomId == c.Id
))
.Select((o, i, c) =>
(dynamic) new { orderName = o.Name, cusName=c.Name }).Mapper(it=> { it.orderName = "_"+it.orderName; }).ToList();

更多Mapper用法: http://www.codeisbug.com/Home/Doc?typeId=1188


双查询结果用法

当我们需要在select后在外面在包一层select,代码如下

      var getAll = db.Queryable<Order>()
            .Select(it => new Order
            {
                Id = it.Id * 2,
                Name = it.Name
            })
            .MergeTable()//将上面的操作变成一个表 mergetable
            .GroupBy(it => it.Id)//对表mergetable进行分组
            .Select(it =>new{ id=it.Id }).ToList();//查询mergetable表里面的字段
SELECT `Id` FROM  (SELECT  ( `Id` * @Id0 ) AS `Id` , `Name` AS `Name`  FROM `Order`  ) MergeTable  GROUP BY `Id`
参数 @Id0:2