Skip to content

SQLClip

Overview

INFO

SQLClip is syntactic sugar over SQLBuilder: fluent like SQL, but entity-driven instead of raw fragments. It targets developers who think in tables/columns while staying in C#.

WARNING

Best for ad-hoc joins and column picks that repositories or pure LINQ make awkward. It relies on out var table aliases—mind their lifetime to avoid subtle bugs.

Obtain a clip

c#
var clip= DBCash.useClip(0);

From DBInstance:

c#
var db = DBCash.GetDBInstance(0);
var work3= db.useClip();

SQLBuilder.useClip overloads

c#
public static SQLClip useClip(this SQLBuilder builder,bool inherit=false)

public static R useClip<R>(this SQLBuilder builder,Func<SQLClip,R> clipAction,bool inherit=false)

public static SQLBuilder useClip<R>(this SQLBuilder builder,out R val, Func<SQLClip, R> clipAction, bool inherit = false)

Examples

c#
var vclink= kit.useClip()
    .from<BusiViewCompLinkDataSet>(out var v)
    .where(()=>v.BusiViewCompLinkOID, para.VCLinkOID)
    .select(()=>new { v.ParentOID ,v.UCMLClassOID})
    .queryUnique();
c#
var vclink= kit.useClip((clip)=>{
    clip.from<BusiViewCompLinkDataSet>(out var v)
    .where(()=>v.BusiViewCompLinkOID, para.VCLinkOID)
    .select(()=>new { v.ParentOID ,v.UCMLClassOID})
    .queryUnique();    
})
c#
kit.useClip(out var vclink,(clip)=>{
    clip.from<BusiViewCompLinkDataSet>(out var v)
    .where(()=>v.BusiViewCompLinkOID, para.VCLinkOID)
    .select(()=>new { v.ParentOID ,v.UCMLClassOID})
    .queryUnique();    
})

SELECT

c#
var cmd= clip.from<HHDutyItem>(out var a)
    .join<HHGoodsBag>(out var b)
    .on(() => a.HH_GoodsBag_FK == b.HH_GoodsBagOID)
    .where(() => a.Di_Name == "1")
    .where(()=>b.Gb_Idx==id)
    .whereIn(()=>a.Di_Idx, new List<int?> { 1,3 })
    .select(()=> new { a.Di_Code,a.Di_Idx,b.Gb_Idx })
    .toSelect();
sql
SELECT a.Di_Code,a.Di_Idx,b.Gb_Idx 
from hh_dutyitem AS a 
join hh_goodsbag AS b ON a.HH_GoodsBag_FK = b.HH_GoodsBagOID 
where  ( a.Di_Name = @kgwh_0_wp0 
AND b.Gb_Idx = @kgwh_0_wp1 
AND a.Di_Idx  IN  (1,3) )

UPDATE

c#
var cc= clip.setTable<UCMLClassDataSet>(out var u)
    .set(() => u.ChineseName, "caption")
    .set(() => u.ClassName, "name")
    .where(() => u.UCMLClassOID, 1)
    .doUpdate();

DELETE

c#
var cc= clip.setTable<UCMLClassDataSet>(out var u)
    .where(() => u.UCMLClassOID, 1)
    .doDelete();

API

from

c#
clip.from<BusiViewCompLinkDataSet>(out var v)

where

Use the out alias for columns.

c#
clip.where(() => u.UCMLClassOID, 1)

whereLike / whereLikeLeft

c#
clip.whereLike(() => d.Di_Name, "admin")
clip.whereLikeLeft(() => d.Di_Name, "admin")

whereIn

c#
clip.whereIn(()=>a.Di_Idx, new List<int?> { 1,3 })

Subquery:

c#
.whereIn(() => d.Di_Name, (c) =>
{
    return c.from<HHWordBag>(out var w)
    .where(() => w.Wb_Code, "a")
    .select(w.Wb_Name);
})

sinkOR / rise

c#
clip.sinkOR()
clip.rise()

select

c#
clip.select(()=> new { a.Di_Code,a.Di_Idx,b.Gb_Idx })
clip.from<BusiViewCompLinkDataSet>(out var v)
    .select(v)

setTable

c#
clip.setTable<UCMLClassDataSet>(out var u)

queryUnique / queryList

c#
var row= clip.queryUnique()
var list= clip.queryList()

doUpdate / doDelete

c#
var list= clip.doUpdate()
var list= clip.doDelete()