splitOn参数:用来指定列为分隔列,之前的列为前一对象,之后的列为后一对象。
lookup 用来保存中间处理结果,可以理解为将结果归组出Group对象,并为其RightsList添加内容,
注意:lookup中添加的是临时定义的Group对象,并在循环中将此对象从lookup中取出,为其RightsList添加Rights
class Rights
{
public string ID{get;set;}
public string Name{get;set;}
}


class Group
{
public string ID{get;set;}
public string Name{get;set;}
public List<Rights> RightsList{get;set;}
}


CREATE TABLE `t_group_right` (
`rightId` varchar(50) NOT NULL,
`groupId` varchar(50) NOT NULL,
KEY `FK_group_rights_id` (`rightId`),
KEY `FK_rights_group_id` (`groupId`),
CONSTRAINT `FK_group_rights_id` FOREIGN KEY (`rightId`) REFERENCES `t_rights` (`id`),
CONSTRAINT `FK_rights_group_id` FOREIGN KEY (`groupId`) REFERENCES `t_group` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


查询角色列表

public List<Group> GetAll()
{
string sql = "SELECT a.*,c.* FROM t_group a left join t_group_right b on a.id = b.groupid left join t_rights c on c.id=b.rightid ";
using (MySqlConnection conn = DapperFactory.CrateMySqlConnection())
{
var lookup = new Dictionary<string, Group>();
var list = conn.Query<Group, Rights, Group>(sql, (g, r) =>
{
Group tmp;
if (!lookup.TryGetValue(g.ID, out tmp))
{
tmp = g;
lookup.Add(g.ID, tmp);
} tmp.RightsList.Add(r); return g;
}
, splitOn: "id").ToList();
return lookup.Values.ToList();
} }


Operator对象
class Operator{
public string ID{get;set;}
public string Name{get;set;}
[NoWrite]
public List<Group> GroupList { get; set; }
[NoWrite]
public List<Rights> RightsList { get; set; }
}


查询一个Operator对象
 public Operator Get(string id)
{
using (MySqlConnection conn = DapperFactory.CrateMySqlConnection())
{
string sql = "SELECT a.*,c.*,e.* FROM t_operator a left join t_operator_group b on a.id = b.operatorid left join t_group c on c.id=b.groupid " +
"left join t_operator_rights d on a.id = d.operatorid left join t_rights e on e.id = d.rightid where a.id=@id";
Operator lookup = null;
conn.Query<Operator, Group, Rights, Operator>(sql, (o, g, r) =>
{
if (lookup == null)
{
lookup = o;
}
Group tmp = lookup.GroupList.Find(f => f.ID == g.ID);
if (tmp == null)
{
tmp = g;
lookup.GroupList.Add(tmp);
}
tmp.RightsList.Add(r);
lookup.RightsList.Add(r);
return o;
},
param: new { id = id },
splitOn: "id");
return lookup;
} }


获取Operator列表:

public List<Operator> GetAll()
{
using (MySqlConnection conn = DapperFactory.CrateMySqlConnection())
{
string sql = "SELECT a.*,c.*,e.* FROM t_operator a left join t_operator_group b on a.id = b.operatorid left join t_group c on c.id=b.groupid " +
"left join t_operator_rights d on a.id = d.operatorid left join t_rights e on e.id = d.rightid";
var lookup = new Dictionary<string,Operator>();
conn.Query<Operator, Group, Rights, Operator>(sql, (o, g, r) =>
{
Operator tmp;
if (!lookup.TryGetValue(o.ID,out tmp))
{
tmp = o;
lookup.Add(o.ID,tmp);
}
Group tmpG = tmp.GroupList.Find(f => f.ID == g.ID);
if (tmpG == null)
{
tmpG = g;
tmp.GroupList.Add(tmpG);
}
//角色权限列表
Rights tmpR = tmpG.RightsList.Find(f => f.ID == r.ID);
if (tmpR == null)
{
tmpG.RightsList.Add(r);
}
//用户权限列表
tmpR = tmp.RightsList.Find(f => f.ID == r.ID);
if (tmpR == null)
{
tmp.RightsList.Add(r);
} return o;
},
splitOn: "id");
return lookup.Values.ToList();
}
}

最新文章

  1. Python初探-购物车程序
  2. CodeForces336 A &amp; B
  3. iOS之 Xcode7下 bitcode的工作流程及安全评估
  4. LoadRunner AJAX TruClient协议Tips and Tricks
  5. [python]初探socket
  6. ahjesus C# 4.0 Parallel 并行运算
  7. 夺命雷公狗---DEDECMS----16dedecms取出首页今日更新
  8. lintcode:验证二叉查找树
  9. HDU 1517 (类巴什博奕) A Multiplication Game
  10. 用pf透明地将流量从一台机器转到另一台机器上的缘起及实现方式对比
  11. Silverlight引用WebService时取消对ServiceReferences.ClientConfig文件的依赖
  12. SDKInitializer.initialize报错求助
  13. 教你使用shell数组
  14. 分享一个完整的Mybatis分页解决方案
  15. java服务端和用户端
  16. Python打包EXE神器 pyinstaller
  17. JavaScript对象之关联数组
  18. canvas动画3:交互
  19. Java数据结构和算法(七)——链表
  20. Android支持多国语言化Values命名

热门文章

  1. WPF Path 画箭头
  2. FusionCharts的使用方法 - 公司所用的flash式的图像统计工具
  3. robot framework学习笔记之三—Scalar变量
  4. Linux 解压 压缩文件
  5. Elasticsearch(9):使用Logstash-input-jdbc同步数据库中的数
  6. Elasticsearch 5 Ik+pinyin分词配置详解
  7. 基于Django+celery二次开发动态配置定时任务 ( 二)
  8. c++之选择排序和冒泡排序实现
  9. webpack+vue中安装使用vue-layer弹窗插件
  10. dubbo集群容错之LoadBalance