Expression / LINQ layer
INFO
Expressions are the first step toward full LINQ. They power repositories, unit of work, etc. IDbBus is the main surface (similar to EF Core DbSet); a translator turns expression trees into SQL.
WARNING
Great for simple entity CRUD. For complex multi-join projections prefer SQLBuilder.
Basics
useBus
c#
DBCash.useBus<T>(0);Count
c#
var db = DBCash.useDb<SysUserConfig>(0);
var cc = db.Count();ToPageList
Separate page + size:
c#
var db = DBCash.useDb<SysUserConfig>(0);
var dt = db
.Where((d) => d.uc_Key.Contains("a"))
.SetPage(1,20)
.ToPageList();Combined:
c#
var db = DBCash.useDb<SysUserConfig>(0);
var dt = db
.Where((d) => d.uc_Key.Contains("a"))
.ToPageList(1,20);Where
c#
var db = DBCash.useDb<SysUserConfig>(0);
var cc= db
.Where((d) => d.uc_Idx > 1)
.Count();Chained:
c#
var db = DBCash.useDb<SysUserConfig>(0);
var d2 = db
.Where((d) => d.uc_Idx > 1)
.Where((d) => (d.uc_Key=="a" ) )
.Take(2)
.ToList();AND / OR groups:
c#
var db = DBCash.useDb<SysUserConfig>(0);
var d2 = db
.Where((d) => (p.uc_Key == "a" && p.uc_Id > 1) || (p.uc_Idx == 2 && p.uc_Created < DateTime.Now) )
.Take(2)
.ToList();Single
c#
var db = DBCash.useDb<SysUserConfig>(0);
var d2 =
from p in db
where (p.uc_Key == "a" && p.uc_Id > 1) || (p.uc_Idx == 2 && p.uc_Created < DateTime.Now)
select p
;
var dt = d2.Single();Set + DoUpdate
c#
var db = DBCash.useDb<SysUserConfig>(0);
var dt = db
.Set((d)=>d.uc_Note,"a")
.Where((d)=>d.uc_Key=="a")
.DoUpdate();InjectSQL
c#
var db = DBCash.useDb<SysUserConfig>(0);
var dt = db
.Where((d) => d.uc_Key == "a")
.InjectSQL((kit, context) => {
kit.where("1=1");
})
.Count();Like
c#
var db = DBCash.useDb<SysUserConfig>(0);
var dt = db
.Where((d) => d.uc_Key.Like("a"))
.Where((d) => d.uc_Title.LikeLeft("b"))
.Count();Joins
c#
var db = DBCash.useDb<SysUserConfig>(0);
var dt = db
.LeftJoin<HHDutyItem>((a,b)=>a.uc_Key==b.HH_DutyItemOID)
.Where((d) => d.uc_Key.Contains("a"))
.Count();c#
var db = DBCash.useDb<SysUserConfig>(0);
var dt = db
.RightJoin<HHDutyItem>((a,b)=>a.uc_Key==b.HH_DutyItemOID)
.Where((d) => d.uc_Key.Contains("a"))
.Count();c#
var db = DBCash.useDb<SysUserConfig>(0);
var dt = db
.InnerJoin<HHDutyItem>((a,b)=>a.uc_Key==b.HH_DutyItemOID)
.Where((d) => d.uc_Key.Contains("a"))
.Count();