queryable动态拼接

只有当queryable类型转成其它类型时才会执行数据操作


条件拼接

var queryable2 = db.Queryable<Student>().Where(it => true);
if (maxId.ObjToInt() == 1)
{
    queryable2.Where(it => it.id == 1);
}
else
{
    queryable2.Where(it => it.id == 2);
}
var list = queryable2.ToList();


分页的例子

var queryable = db.Queryable<Student>()
.JoinTable<School>((s1, s2) => s1.sch_id == s2.id)  
.JoinTable(childTableName, "a1", "a1.id=s2.areaid", new { id = 1 }, JoinType.INNER) 
.OrderBy(s1 => s1.id);

使用上面的queryable

var list = queryable
  .Select<School, Area, V_Student>
        ((s1, s2, a1) => new V_Student { id = s1.id, name = s1.name, SchoolName = s2.name, AreaName = a1.name })
  .ToPageList(0, 200);

使用上面的queryable

var count = queryable.Count();


注意:

queryable在作为变量拼接的时候不要加入select


错误写法  var queryable=db.Queryable<T>().select("id,name");    list=queryable.ToList();


正确写法  var queryable=db.Queryable<T>();    list=queryable.select("id,name").ToList();




多个Queryable的拼接

无参数:

string sql = db.Queryable<Student>().ToSql().Key + " union all " + db.Queryable<Student>().ToSql().Key;
var student = db.SqlQuery<Student>(sql);


有参数:

有参数的情况需要注意拉姆达生成的参数例如 id会变成@id+101 name会变成@name101

string sql = db.Queryable<Student>().Where(it=>it.id==id).ToSql().Key + " union all " + db.Queryable<Student>().ToSql().Key;
var student = db.SqlQuery<Student>(sql, new {id101=id });


如果是 where(it=>it.id>id&&it.x<id)这种情况会生成两个id参数 @id101 和 @id201





收藏到朋友圈: