using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZDWorkflow.Model;
using ZDWorkflow.Common;
using ZDWorkflow.Common.Extensions;
using CYQ.Data;
using CYQ.Data.Orm;
using CYQ.Data.Table;

namespace ZDWorkflow.BLL
{
/// <summary>
/// GroupRole(角色组与角色关系表)
/// </summary>
public class GroupRoleBLL
{
/// <summary>
/// 分组列表操作角色
/// </summary>
/// <param name="jsonRoles"></param>
/// <param name="user"></param>
/// <returns></returns>
public ResultModel EditGroupRole(string jsonRoles, long GroupId, LoginUserInfo user)
{
ResultModel result = new ResultModel();
using (MAction mc = new MAction(TableNames.GroupRole))
{
mc.BeginTransation();
try
{
//传到过来
List<GroupRole> grlistnew = new List<GroupRole>();
grlistnew = jsonRoles.ToObject<List<GroupRole>>();
// List<long> idsnew = new List<long>();
var idsnew = grlistnew.Select(s => s.RoleId).ToList();

//原数据库
List<GroupRole> grlistold = new List<GroupRole>();
MDataTable dt = mc.Select("GroupId=" + GroupId);
grlistold = dt.ToList<GroupRole>();
//List<long> idsold = new List<long>();
var idsold = grlistold.Select(s => s.RoleId).ToList();

#region 注释
//foreach (GroupRole item in grlistnew) {

// GroupRole ditem = grlistold.FirstOrDefault(s => s.RoleId == item.RoleId);
// if (ditem != null)
// {
// //新增
// }
// else
// {
// //修改
// item.GroupId = GroupId;
// }
//}
//删除
//var del= idsold.Where(w => !idsnew.Contains(w)).ToList();
#endregion
var a = idsnew.Intersect(idsold); // to modify
var b = idsnew.Except(idsold); // to add
var c = idsold.Except(idsnew); // to delete
List<GroupRole> toAddList = new List<GroupRole>();
List<GroupRole> toDeleteList = new List<GroupRole>();
List<GroupRole> toModifyList = new List<GroupRole>();
// set addList
foreach (var bitem in b)
{
var bModel = grlistnew.Find(p => p.RoleId == bitem);
bModel.GroupId = GroupId;
toAddList.Add(bModel);
}
//toAddList = grlistnew.Where(w => b.Contains(w.RoleId)).ToList();
// set delete querymodel
toDeleteList = grlistold.Where(w => c.Contains(w.RoleId)).ToList();
// set modify querymodel
toModifyList = grlistold.Where(w => a.Contains(w.RoleId)).ToList();

//新增
mc.Data.LoadFrom(toAddList);
mc.Insert();

//删除
foreach (GroupRole item in toDeleteList)
{
mc.SetPara("GroupId", item.GroupId);
mc.SetPara("RoleId", item.RoleId);
mc.Delete("GroupId=@GroupId and RoleId=@RoleId");
}
mc.EndTransation();
result.Status = (int)EStatus.Success;
result.Msg = "提交成功!";
}
catch (Exception ex)
{
mc.RollBack();
result = ex;
}
}
return result;
}
}
}

CYQ MAction,子表 新增,删除,修改 集合的更多相关文章

  1. oracle触发器,一个表新增、修改的同时同步另一张表

    oracle创建触发器,把本地新增.修改数据过程同步到另一个服务器上去. 如果是本地,加数据库名即可.如果是远程服务器,不是一台机器,做一个db_link操作即可. ----------------- ...

  2. 将表A的数据复制到表B,以及关于主表和子表的删除办法

    如果表A的数据结构和表B的数据结构是一样的,字段名字可以不用相同,但是对应的数据类型是一样的 这样的情况下可以用如下的方式实现将表A的数据复制到表B INSERT INTO #TEMP2 SELECT ...

  3. JavaScript学习笔记-商品管理新增/删除/修改功能

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  4. Javascript-商品管理新增/删除/修改功能

    <!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml"> ...

  5. asp.net(C#)html无限分类树 可新增 删除 修改

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="ProductSort.aspx ...

  6. DB2 alter 新增/删除/修改列

    SQL语句 增加列.修改列.删除列 1 添加字段 语法 : alter table 表名称 add 字段名称 类型 demo: alter table tableName add columnName ...

  7. Oracle Delete inner的方式,级联删除子表的数据方式。

    例子1: from table2 b where a.id=b.id) 例子2: rebatepolicy表是主表,rebatepolicyitems是从表,从表有主表的主键,现在对于主表一些条件的数 ...

  8. c#封装DBHelper类 c# 图片加水印 (摘)C#生成随机数的三种方法 使用LINQ、Lambda 表达式 、委托快速比较两个集合,找出需要新增、修改、删除的对象 c# 制作正方形图片 JavaScript 事件循环及异步原理(完全指北)

    c#封装DBHelper类   public enum EffentNextType { /// <summary> /// 对其他语句无任何影响 /// </summary> ...

  9. Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法

    一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase).分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中.分区完全对应用透明. Orac ...

随机推荐

  1. RocketMQ读书笔记1——简述

    [消息队列的功能介绍] 分布式消息队列可以提供应用解耦.流量削峰.消息分发.保证最终一致性.方便动态扩容等功能. [MQ使用场景1——应用解耦] 复杂的系统如电商系统,会存在多个子系统,如订单系统.库 ...

  2. VC中BSTR、Char*、CString和CComBSTR类型的转换

    原文:http://blog.csdn.net/wanghaihao_1/article/details/37498689 1.char*转换成CString 若将char*转换成CString,除了 ...

  3. Android Animation 知识点速记备忘思维导图

    备注的大段文本,无法在图片中体现, 思维导图源文件放在附件中.使用 Xmind 8 制作. 附件:AndroidAnimation-xmind.zip

  4. 使用Mist部署Contract到Rinkeby以太坊网络

    本文使用MyEthWallet新建一个账号,并导入到Mist中,然后部署Contract到Rinkeby网络使用MyEthWallet新建账号的好处是除了JSON文件之外,还能得到一张它生成的pdf( ...

  5. Java—IO流 字节流

    IO流(输入流.输出流),又分为字节流.字符流. 流是磁盘或其它外围设备中存储的数据的源点或终点. 输入流:程序从输入流读取数据源.数据源包括外界(键盘.文件.网络…),即是将数据源读入到程序的通信通 ...

  6. react-native 在Xcode上传到iTunes Connect里报错

    在xcode里面点击“upload to app store”的时候,提示“the session's status is FAILED and the error description is 'C ...

  7. SQLServer 2008 新增T-SQL 简写语法

    1.定义变量时可以直接赋值 DECLARE @Id int = 5 2.Insert 语句可以一次插入多行数据 INSERT INTO StateList VALUES(@Id, 'WA'), (@I ...

  8. json转换为tree对象(递归)

    const newTeam = function (data, parentId) { 2 let itemArr = []; 3 for (let i = 0; i < data.length ...

  9. 网络解析json

    public class myActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceSta ...

  10. UglifyJS 压缩选项

    UglifyJS 压缩选项 1.使用逗号运算符连接简单语句 2.使用点符号代替中括号属性     foo [“bar”]→foo.bar 3.删除逻辑上走不到的代码 4.删除调试代码    debug ...