昨天取得資料庫中的清單後,會發現一個問題,
我們無法判斷哪些訂單已經完成和未完成。
begin tran
ALTER TABLE menulisth ADD orderDone bit Default 0
ALTER TABLE menulistb ADD itemDone bit Default 0
commit tran
兩個數值初始值都給予0,當資料型態變成 1的時候就是已經完成了。
接著我們需要把剛剛新增的欄位加入到我們的Data Class 中,
這樣才可以與資料庫的欄位完全匹配
Menulisth.cs
OrderDone
[SugarColumn(IsOnlyIgnoreInsert = true)]
public bool OrderDone { get; set; }
我們在新增的時候已經有賦予預設值了,所以在insert的時候不需要給他數值。
另外SQL中的bit 等同於 C#中的 bool ,
所以我們這邊要用bool型態對應。
3. 打開Menulistb.cs
4. 新增欄位 ItemDone
[SugarColumn(IsOnlyIgnoreInsert = true)]
public bool ItemDone { get; set; }
跟前面一樣使用bool型態作對應。
若我們在SelectOrder()
中想取得的訂單只有未完成訂單的話,
我們只需要在SelectOrder中修改
ProprietorModel.cs
SelectOrder()
,新增where條件var list_h = db.Queryable<Menulisth>().Where(item => item.OrderDone == false).OrderBy(menu => menu.Createtime, OrderByType.Asc).ToList();
var list_b = db.Queryable<Menulistb, Menulisth>((body, head) => new JoinQueryInfos(JoinType.Left, head.Uid == body.H_uid))
.Where((body, head) => head.OrderDone == false)
.OrderBy((body, head) => head.Createtime, OrderByType.Asc)
.Select<Menulistb>().ToList();
完整程式碼:
public List<Order> SelectOrder(IConfiguration config)
{
var order_list = new List<Order>();
//連線設定
SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()
{
//連線字串
ConnectionString = config.GetValue<string>("WebmenuConnectionString"),
DbType = DbType.SqlServer,//連線類型
IsAutoCloseConnection = true //自動關閉連線
});
try
{
//當執行時,觸發事件
db.Aop.OnLogExecuting = (sql, pars) =>
{
Console.WriteLine(sql);//查看SQL語法
};
//begin tran
db.BeginTran();
//取得菜單表頭,並排序(正序)
var list_h = db.Queryable<Menulisth>().Where(item => item.OrderDone == false).OrderBy(menu => menu.Createtime, OrderByType.Asc).ToList();
var list_b = db.Queryable<Menulistb, Menulisth>((body, head) => new JoinQueryInfos(JoinType.Left, head.Uid == body.H_uid))
.Where((body, head) => head.OrderDone == false)
.OrderBy((body, head) => head.Createtime, OrderByType.Asc)
.Select<Menulistb>().ToList();
//將表頭加入到表身資料寫入
foreach (var head in list_h)
{
var order = new Order();
//加入表頭
order.head = head;
//加入表身
foreach(var body in list_b)
{
if(body.H_uid == head.Uid)
{
order.bodys.Add(body);
}
}
order_list.Add(order);
}
db.CommitTran();
}
catch
{
db.RollbackTran();//rollback
throw;
}
return order_list;
}
從今天的修改可以看出對一些資料進行修改時,是完全不需要動到Controller。
當有一天我們程式碼成長到上千行之後,我們不需要在茫茫大海裡找出我們處理資料的邏輯。
只需要在對應的function()
中進行修改即可。
之後的篇章中我們會用到今天新增的欄位來幫我們分已完成與未完成的訂單。
這邊會需要用到動態新增資料的方式。
如果希望資料庫能有更完整的結構的話還可以新增兩個欄位: