Dapper链接查询扩展
一对多映射关系
/// <summary>
/// 一对多连接查询
/// </summary>
/// <typeparam name="FirstT">主键表实体类型</typeparam>
/// <typeparam name="SecondT">外键表实体类型</typeparam>
/// <typeparam name="ReturnT">返回的实体类型(一般如果实体中存在映射关系的时候返回类型与主键表类型基本相同)</typeparam>
/// <param name="sqlStr">连接查询的sql</param>
/// <param name="ForeignKeyName">主键表实体中的的外键表集合名称</param>
/// <param name="Name">外键表中的外键名</param>
/// <returns></returns>
public static List<FirstT> SelectOneToMore<FirstT, SecondT, ReturnT>(string sqlStr, string ForeignKeyName, string Name) where FirstT : IDataEntity, new()
{
using (var conn = ConnectionFactory.Connection)
{
List<FirstT> list = new List<FirstT>();
var lookUp = new Dictionary<int, FirstT>();
list = conn.Query<FirstT, SecondT, FirstT>(sqlStr,
(firstT, secondT) =>
{
FirstT t;
if (!lookUp.TryGetValue(firstT.ID, out t))
{
lookUp.Add(firstT.ID, t = firstT);
}
foreach (var item in firstT.GetType().GetProperties())
{
if (item.Name == ForeignKeyName)
{
var a = item.GetValue(firstT, null) as HashSet<SecondT>;
a.Add(secondT);
}
}
//t.GetType().GetMember(ForeignKeyName)
return firstT;
}, null, null, true, Name, null, null).ToList(); return list;
} }
一对一映射关系
/// <summary>
/// 一对一链接查询
/// </summary>
/// <typeparam name="FirstT">主键表类型</typeparam>
/// <typeparam name="SecondT">外键表类型</typeparam>
/// <typeparam name="ReturnT">返回值类型</typeparam>
/// <param name="sqlStr">sql</param>
/// <param name="ForeignKeyName">主键表实体中的的外键表集合名称</param>
/// <param name="Name">外键表中的外键名</param>
/// <returns></returns>
public static List<FirstT> SelectOneToOne<FirstT, SecondT, ReturnT>(string sqlStr, string ForeignKeyName, string Name)
where FirstT : IDataEntity, new()
where SecondT : class,IDataEntity, new()
{
using (var conn = ConnectionFactory.Connection)
{
List<FirstT> list = new List<FirstT>();
var lookUp = new Dictionary<int, FirstT>();
list = conn.Query<FirstT, SecondT, FirstT>(sqlStr,
(firstT, secondT) =>
{
foreach (var item in firstT.GetType().GetProperties())
{
if (item.Name == ForeignKeyName)
{
item.SetValue(firstT, item.GetValue(firstT, null));
}
}
//t.GetType().GetMember(ForeignKeyName)
return firstT;
}, null, null, true, Name, null, null).ToList(); return list;
} }
Dapper链接查询扩展的更多相关文章
- 为EasySharding.EFCore提供Dapper相关查询扩展
承接上一篇博文中的中间件基本都是写入性的操作,但对于查询操作实际上是比较鸡肋的,如果单纯的查询,没有分表的情况下基本还能适应,这里为了Dapper提供了扩展 Dapper的扩展查询是需要写表名称的,所 ...
- sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)
sql的行转列(PIVOT)与列转行(UNPIVOT) 在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...
- Dapper 链式查询 扩展
Dapper 链式查询扩展 DapperSqlMaker Github地址:https://github.com/mumumutou/DapperSqlMaker 欢迎大佬加入 Demo: 查询 ...
- Dapper的完整扩展(转)
真心想说:其实...我不想用Dapper,如果OrmLite.Net支持参数化的话,也就没Dapper的什么事情了,对于OrmLite.Net只能做后续跟踪...... 这个其实是看了Dapper作者 ...
- Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)
Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...
- SQL server 链接查询
一.链接查询 1.join on 左右链接 2.左右查询 left right 3.union 上下链接
- Hibernate SQLQuery简单实用,做链接查询
工单里面可能有0个告警,一个或多个告警,当工单中没有告警的时候也需要将工单显示出来,所以就需要使用工单和告警的做链接查询,下面是具体实例 表: CREATE TABLE `alarm` ( `id` ...
- 如何用拉姆达表达式(Lambda Expressions) 书写左链接查询
在C#中,如果要实现两个列表的左链接查询,我们的一般用法就是用的linq表达式就是 List<Pet> pets = }, }, } }; List<Pet2> pets2 = ...
- MySQL -- 全文检索(查询扩展检索)
通常用在查询的关键词太短,用户需要隐含知识进行扩展.例如,查单词database时,用户可能还希望不仅仅包含database的文档,可能还指包含mysql.oracle.db2等单词.这时就需要查询扩 ...
随机推荐
- 为网页设计师准备的30个使用的HTML5框架
原文地址:http://www.goodfav.com/zh/html5-framework-8189.html 网页设计师在开始使用一些应用程序之前需要考虑几个事实,以确保在应用Web程序框架时,这 ...
- Mapreduce读取Hbase表,写数据到一个Hbase表中
public class LabelJob { public static void main(String[] args) throws Exception { Job job = Job.getI ...
- EF selection expression 与 Linq备忘
一.左连接查询 var query = people.GroupJoin(pets, person => person, pet => pet.Owner, (person, petCol ...
- php框架推荐
ThinkPHP, 国内开发的框架,特别容易入门,中文文档细致,表述准确. Laravel, 国外框架,非常高级的一个框架,特别是前端比较模块化,但入门难一些,速度不高. laravel在lampp ...
- 第二百三十天 how can I 坚持
上周日去蟒山摘的松子吗?应该是松子吧,裂开了呢.为啥呢.原来博客园可以上传图片,只是上传起来好费劲啊. 今天程哥问给我分的活多不多,我竟然说了句好多,哎.其实很多问题可以用还好来回答,还好,还行,哈哈 ...
- 什么是ADB
ADB, Android Debug Bridge, 是一个client-server程序,可以用来和安卓设备交流 Client: 用来发送命令的,client运行在开发机器上(电脑cmd, adb ...
- ESB 客户端调用 处理类
esb package com.isoftstone.synchronize.entrance; import java.io.File; import java.text.SimpleDateFor ...
- jdk5下载链接
查看jdk版本 java -version JDK下载 最新版本 http://www.oracle.com/technetwork/java/javase/downloads/index.html ...
- linux极点五笔无法输入词组_ibus设置
菜鸟学linux——用的是ubuntu 不知道是不是按个哪些快捷键,极点五笔突然无法输入词组.那个抓狂啊 没关系,设置一下就ok 第一步:右上角输入法,右键——>首选项——>常规——> ...
- Mac配置JAVA_HOME
首先打开终端,输入/usr/libexec/java_home,看到 /Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home 说 ...