并集查询

实体方式

使用实体类方式,要保证生成的Select中的列要一致,用Select一定要 new Class或者 ((object)new {}写法 保证返回类型是引用类型

 var q1 = db.Queryable<Student>().Select(it=>new Model{ name=it.Name }); //select结构要一样
 var q2 = db.Queryable<School>().Select(it => new Model { name = it.Name });
 var list = db.UnionAll(q1, q2).ToList();

生成的Sql如下:

 
SELECT * FROM  (SELECT  [Name] AS [name]  FROM [STudent]  UNION ALL
SELECT  [Name] AS [name]  FROM [School] ) unionTable

匿名对象方式

要加一个object的转换

//SqlSugarCore 5.1.4.147-preview14 及以上 完美支持匿名对象 请升级
var q1=db.Queryable<Order>().Select(it => new { id=it.Id });//select结构要一样
var q2 = db.Queryable<Order>().Select(it =>new { id = it.Id });
db.UnionAll(q1, q2).ToList();

//SqlSugarCore 5.1.4.147-preview14 及以下
var q1=db.Queryable<Order>().Select(it => (object)new { id=it.Id });
var q2 = db.Queryable<Order>().Select(it =>(object) new { id = it.Id });
db.UnionAll(q1, q2).Select<Order>().ToList();

单个字段

var q1=db.Queryable<Order>().Where(it=>it.id>10).Select(it =>(object) it.Name);
var q2=db.Queryable<Order>().Where(it=>it.id==2).Select(it => (object)it.Name);
var kust=db.UnionAll(q1, q2)
.Select<string>().ToList();

跨库

var q1=db.Queryable<UnitNClobTest>().AsWithAttr();//转换表名 具体用法看跨库查询 AS 出来的表名规则一样的
var q2=db.Queryable<UnitNClobTest>().AsWithAttr();
db.UnionAll(q1, q2).ToList();

MySql Limit Union all

升级最新

关闭
果糖网