LambdicSql_α0.0.53をリリースしました。
www.nuget.org
テーブル名とカラム名のルール
LambdicSqlのテーブル名とカラム名は、通常は変数名で表します。
public class Staff
{
public int id { get; set; }
public string name { get; set; }
}
public class Remuneration
{
public int id { get; set; }
public int staff_id { get; set; }
public DateTime payment_date { get; set; }
public decimal money { get; set; }
}
public class DB
{
public Staff tbl_staff { get; set; }
public Remuneration tbl_remuneration { get; set; }
}
スキーマを使う場合も変数名で表します。(もちろんスキーマを書く必要がない場合はこれは省略できます)
public class DBO
{
public Staff tbl_staff { get; set; }
public Remuneration tbl_remuneration { get; set; }
}
public class DB_EX
{
public DBO dbo { get; set;}
}
var query = Sql<DB_EX>.Create(db =>
Select(new
{
Name = db.dbo.tbl_staff.name,
PaymentDate = db.dbo.tbl_remuneration.payment_date,
Money = db.dbo.tbl_remuneration.money,
}).
From(db.dbo.tbl_remuneration).
Join(db.dbo.tbl_staff, db.dbo.tbl_staff.id == db.dbo.tbl_remuneration.staff_id));
var info = query.ToSqlInfo(_connection.GetType());
Debug.Print(info.SqlText);
SELECT
dbo.tbl_staff.name AS "Name",
dbo.tbl_remuneration.payment_date AS "PaymentDate",
dbo.tbl_remuneration.money AS "Money"
FROM dbo.tbl_remuneration
JOIN dbo.tbl_staff ON (dbo.tbl_staff.id) = (dbo.tbl_remuneration.staff_id)
TableAttributeとColumnAttributeに対応しました。
それに加えてTableAttribute、ColumnAttributeでも名前を指定できるようにしました。
TableAttribute、ColumnAttributeは System.ComponentModel.DataAnnotations.dll に定義されている標準のものです。
テーブル名とか変数名をラムダ中で短く書きたい場合や、スキーマを一段クラスで表現するのが面倒な場合、それからテーブルやカラムの名前がC#の変数名で使えないものだったりする場合に利用できると思います。
[Table("tbl_staff")]
public class StaffX
{
[Column("id")]
public int idx { get; set; }
[Column("name")]
public string namex { get; set; }
}
public class DB
{
public StaffX xxx { get; set; }
public Remuneration tbl_remuneration { get; set; }
}
var query = Db<DB>.Sql(db =>
Select(new
{
name = db.xxx.namex,
payment_date = db.tbl_remuneration.payment_date,
money = db.tbl_remuneration.money,
}).
From(db.tbl_remuneration).
Join(db.xxx, db.tbl_remuneration.staff_id == db.xxx.idx);
var info = query.Build(_connection.GetType());
Debug.Print(info.SqlText);
SELECT
tbl_staff.name AS "name",
tbl_remuneration.payment_date AS "payment_date",
tbl_remuneration.money AS "money"
FROM tbl_remuneration
JOIN tbl_staff ON (tbl_remuneration.staff_id) = (tbl_staff.id)