昨天取得资料库中的清单後,会发现一个问题,
我们无法判断哪些订单已经完成和未完成。
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()
中进行修改即可。
之後的篇章中我们会用到今天新增的栏位来帮我们分已完成与未完成的订单。
这边会需要用到动态新增资料的方式。
如果希望资料库能有更完整的结构的话还可以新增两个栏位:
<<: 【Day 20】QGIS + OSM + folium part 2
>>: LeetCode 双刀流: 90. Subsets II
不难发现,问题在於该用什麽标准来做决定呢?梁晓声曾讲过,友谊,好比一瓶酒,封存的时间越长,价值则越高...
这篇就做个小测试来解答我的疑问。 首先上一篇是爬阅览人数并且输入进资料库中,那阅览人数其实算数字嘛,...
出於书本 Chapter 1. Introduction to Ethical Hacking 非技...
golang 服务 常用於 http server/ http client 来看看一张厉害的图儿 ...
selector 选取 JQ 的 DOM 存取方式是透过 selector 来达到索引目标,会先转换...