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. 【ArcGIS】最近遇到的几个已经被解决的问题

      昨天刚出差回来,自己的第一个地图项目也就快接近尾声了,回到公司马上就打开了博客园记录一下最近遇到的几个地图相关的问题.   1.在ArcGIS server上点击 View In:ArcGIS J ...

  2. JAVA语法基础要点

  3. Github上600多个iOS开源项目地址

    将Github上600多个iOS开源项目进行分类并且有相应介绍,小伙伴们快来看呀 地址:http://github.ibireme.com/github/list/ios/

  4. 用两个栈实现队列(C++ 和 Python 实现)

    (说明:本博客中的题目.题目详细说明及参考代码均摘自 “何海涛<剑指Offer:名企面试官精讲典型编程题>2012年”) 题目 用两个栈实现一个队列.队列的声明如下,请实现它的两个函数 a ...

  5. mysql 配置详解

    [client]port = 3306socket = /tmp/mysql.sock [mysqld]port = 3306socket = /tmp/mysql.sock basedir = /u ...

  6. nodepad++通过正则表达式,删除带有特殊字符的某一行

    我是VS项目不小心生成了x64平台的sln文件,想把sln文件中带有x64的给删除,一共搜索到500多行,怎么办呢,一个一个删除太费劲儿了. 通过nodepad++ 的正则表达式替换: 我是想删除带X ...

  7. python全栈学习笔记(二)网络基础之子网划分

    阅读目录 一.ip地址基本知识 1.1 ip地址的结构和分类 1.2 特殊ip地址 1.3 子网掩码 1.4 ip地址申请 二.子网划分 2.1 子网划分概念 2.2 c类子网划分初探 2.3 子网划 ...

  8. bzoj2816 [ZJOI2012]网络

    Description http://www.lydsy.com/JudgeOnline/upload/zjoi2012.pdf 正解:$link-cut \ tree$. $LCT$板子题,直接维护 ...

  9. PHP-------文件上传的实例

    文件上传的实例 一.上传头像 在注册时,要求用户上传头像,登陆主页面,显示用户信息时,头像也要显示出来. 例子: 注册页面: 图片存数据库时是text类型. <title>无标题文档< ...

  10. PHP------数组的遍历

    echo current($attr); //取当前元素的value值 echo key($attr); //取当前元素的key next($attr); //将数组里面的指针指向下一个(向下移)pr ...