C#中 Linq實現多表查詢示例
阿新 • • 發佈:2019-06-21
兩表聯查
//多表查詢示例 //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) => new { A1 = a, B1 = b }) .SelectMany( ab => ab.B1.DefaultIfEmpty(),//Left Join (a, b) => new { A2=a, B2=b }) .GroupJoin( ctx.Bomsetmtl, a => new { f = a.A2.A1.Factory, id = a.A2.A1.BomSetId },//主表外來鍵,對應SQL語句“WHERE A.FACTORY=B.FACTORY AND A.BOMSETID=B.BOMSETID” b => new { f = b.Factory, id = b.BomSetId },//外來鍵表主鍵 (a, b) => new { A3 = a, B3 = b } ) .SelectMany( ab => ab.B3.DefaultIfEmpty(),//Left Join (a, b) => new { AID = a.A3.A2.A1.BomSetId,//主表字段,賦別名 a.A3.A2.A1.BomSetDesc,//主表字段 BID = a.A3.B2.BomSetId,//外來鍵表字段,賦別名 a.A3.B2.BomSetVersion,//外來鍵表字段 b.PartGrp }).ToList();
查詢條件拼接:
var query = ctx.Almmsghis.Where(t => t.TranTime.CompareTo(sFromTime) >= 0 && t.TranTime.CompareTo(sToTime) <= 0);
if (sTranTime.Trim() != "")
{
query = query.Where(t => t.TranTime.CompareTo(sTranTime) <= 0);
}
if (sClearFlag.Trim() == "Y")
{
query = query.Where(t => t.ClearFlag.CompareTo(sClearFlag) == 0);
}
else if (sClearFlag.Trim() == "N")
{
query = query.Where(t => t.ClearFlag.CompareTo(" ") == 0);
}
if (sAlarmId.Trim() != "")
{
query = query.Where(t => t.ClearFlag.CompareTo(sAlarmId) == 0);
}
if (sAlarmType.Trim() != " ")
{
query = query.Where(t => t.ClearFlag.CompareTo(sAlarmType) == 0);
}
if (sLotId.Trim() != "")
{
query = query.Where(t => t.ClearFlag.CompareTo(sLotId) == 0);
}
if (sResId.Trim() != "")
{
query = query.Where(t => t.ClearFlag.CompareTo(sResId) == 0);
}
listAlmmsghis = query.OrderByDescending(t => t.TranTime).ToList();