两表联查
//多表查询示例
//1、单条件Join
var bomsetver = ctx.Bomset//主表
.Join(
ctx.Bomsetver,//外键表
a => a.Factory,//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY”
b => b.Factory,//外键表主键
(a, b) => a//查询结果:显示主表的所有字段
);
//2、多条件Join
var bomsetver2 = ctx.Bomset//主表
.Join(
ctx.Bomsetver,//外键表
a => new { f = a.Factory, id = a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a,b)=>new {a,b }//查询结果:显示主表的所有字段和外键表所有字段
);
//3、多条件Join,返回部分字段
var bomsetver3 = ctx.Bomset//主表
.Join(
ctx.Bomsetver,//外键表
a => new { f = a.Factory, id = a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a, b) => new
{
AID = a.BomSetId,//主表字段,赋别名
a.BomSetDesc,//主表字段
BID = b.BomSetId,//外键表字段,赋别名
b.BomSetVersion//外键表字段
});
//4、TableA Left Join TableB
var bomsetver4 = ctx.Bomset
.GroupJoin(
ctx.Bomsetver,
a => new { f = a.Factory, id = a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a, b) => new { AA=a, BB=b })
.SelectMany(
ab => ab.BB.DefaultIfEmpty(),//Left Join
(a,b) => new
{
AID = a.AA.BomSetId,//主表字段,赋别名
a.AA.BomSetDesc,//主表字段
BID = b.BomSetId,//外键表字段,赋别名
b.BomSetVersion//外键表字段
}).ToList();
//5、TableA Right Join TableB
//即TableB Left Join TableA
三表联查:
//多表查询示例
//1、单条件Join
var bomsetver = ctx.Bomset//主表
.Join(
ctx.Bomsetver,//外键表
a => a.Factory,//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY”
b => b.Factory,//外键表主键
(a, b) => a//查询结果:显示主表的所有字段
);
//2、多条件Join
var bomsetver2 = ctx.Bomset//主表
.Join(
ctx.Bomsetver,//外键表
a => new { f = a.Factory, id = a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a,b)=>new {a,b }//查询结果:显示主表的所有字段和外键表所有字段
);
//3、多条件Join,返回部分字段
var bomsetver3 = ctx.Bomset//主表
.Join(
ctx.Bomsetver,//外键表
a => new { f = a.Factory, id = a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a, b) => new
{
AID = a.BomSetId,//主表字段,赋别名
a.BomSetDesc,//主表字段
BID = b.BomSetId,//外键表字段,赋别名
b.BomSetVersion//外键表字段
});
//4、TableA Left Join TableB
var bomsetver4 = ctx.Bomset
.GroupJoin(
ctx.Bomsetver,
a => new { f = a.Factory, id = a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a, b) => new { AA=a, BB=b })
.SelectMany(
ab => ab.BB.DefaultIfEmpty(),//Left Join
(a,b) => new
{
AID = a.AA.BomSetId,//主表字段,赋别名
a.AA.BomSetDesc,//主表字段
BID = b.BomSetId,//外键表字段,赋别名
b.BomSetVersion//外键表字段
}).ToList();
//5、TableA Right Join TableB
//即TableB Left Join TableA
//6、三表及更多表Join
var bomsetver6 = ctx.Bomset//主表
.Join(
ctx.Bomsetver,//外键表一
a => new { f = a.Factory, id = a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a, b) => new{ a, b })
.Join(
ctx.Bomsetmtl,//外键表二
a => new { f = a.a.Factory, id = a.a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a, b) => new
{
AID = a.a.BomSetId,//主表字段,赋别名
a.a.BomSetDesc,//主表字段
BID = a.b.BomSetId,//外键表字段,赋别名
a.b.BomSetVersion,//外键表字段
b.PartGrp
}).ToList();
//7、三表及多表Left Join
var bomsetver7 = ctx.Bomset
.GroupJoin(
ctx.Bomsetver,
a => new { f = a.Factory, id = a.BomSetId },//主表外键,对应SQL语句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID”
b => new { f = b.Factory, id = b.BomSetId },//外键表主键
(a, b