一对多映射关系

 /// <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链接查询扩展的更多相关文章

  1. 为EasySharding.EFCore提供Dapper相关查询扩展

    承接上一篇博文中的中间件基本都是写入性的操作,但对于查询操作实际上是比较鸡肋的,如果单纯的查询,没有分表的情况下基本还能适应,这里为了Dapper提供了扩展 Dapper的扩展查询是需要写表名称的,所 ...

  2. sql的行转列(PIVOT)与列转行(UNPIVOT) webapi 跨域问题 Dapper 链式查询 扩展 T4 代码生成 Demo (抽奖程序)

    sql的行转列(PIVOT)与列转行(UNPIVOT)   在做数据统计的时候,行转列,列转行是经常碰到的问题.case when方式太麻烦了,而且可扩展性不强,可以使用 PIVOT,UNPIVOT比 ...

  3. Dapper 链式查询 扩展

    Dapper 链式查询扩展 DapperSqlMaker   Github地址:https://github.com/mumumutou/DapperSqlMaker  欢迎大佬加入 Demo: 查询 ...

  4. Dapper的完整扩展(转)

    真心想说:其实...我不想用Dapper,如果OrmLite.Net支持参数化的话,也就没Dapper的什么事情了,对于OrmLite.Net只能做后续跟踪...... 这个其实是看了Dapper作者 ...

  5. Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等)

    Linq to SQL 语法查询(链接查询,子查询 & in操作 & join,分组统计等) 子查询 描述:查询订单数超过5的顾客信息 查询句法: var 子查询 = from c i ...

  6. SQL server 链接查询

    一.链接查询 1.join  on  左右链接 2.左右查询 left  right 3.union  上下链接

  7. Hibernate SQLQuery简单实用,做链接查询

    工单里面可能有0个告警,一个或多个告警,当工单中没有告警的时候也需要将工单显示出来,所以就需要使用工单和告警的做链接查询,下面是具体实例 表: CREATE TABLE `alarm` ( `id` ...

  8. 如何用拉姆达表达式(Lambda Expressions) 书写左链接查询

    在C#中,如果要实现两个列表的左链接查询,我们的一般用法就是用的linq表达式就是 List<Pet> pets = }, }, } }; List<Pet2> pets2 = ...

  9. MySQL -- 全文检索(查询扩展检索)

    通常用在查询的关键词太短,用户需要隐含知识进行扩展.例如,查单词database时,用户可能还希望不仅仅包含database的文档,可能还指包含mysql.oracle.db2等单词.这时就需要查询扩 ...

随机推荐

  1. kali 更新源

    个人收集的kali 更新源: 修改更新源: vim /etc/apt/sources.list 更新源列表包: #apt-get update 更新系统软件: #apt-get upgrade #官方 ...

  2. DNN 错误代码 0x80070005 解决方案

    在IIS上创建DNN站点,可能出现的错误代码:0x80070005,因为权限不足而不能访问DNN. 解决方法:打开IIS, 1.右键目标网站->编辑权限->安全->添加组或者用户 “ ...

  3. 3Com Network Supervisor与IBM Tivoli NetView两款网管软件操作视频

    3Com Network Supervisor与IBM Tivoli NetView两款网管软件操作视频   网管软件必须能够实实在在的给我们带来好处,对于企业网络管理来说,其作用体现在以下几个方面: ...

  4. 第二百零八天 how can I 坚持

    今天徐斌生日,生日快乐.买了两个小蛋糕,哈哈 还买了两条熊猫鱼.不知道鱼会不会冻死啊,买了加热器又不想用,看他们造化吧. LOL不错的游戏的. 睡觉,好冷.

  5. 在IT网站上少花些时间

    我自己关注的IT网站还是蛮多的,经常去的有CSDN,博客园,51CTO,InfoQ,还有微博,微信上关注了IT程序猿,IT技术博客大学习,程序员之家, 开发者头条,还有还有,我还通过邮件订阅了码家周刊 ...

  6. java线性表学习笔记(二)

    链表中的每一个元素都包含一个称为节点的结构,每向链表中增加一个元素,就会产生一个与之相关的节点,每个节点与它相邻的节点相连接(这是基础吧,不过在看c的时候没认真看,呼). 定义节点类如下(使用了泛型, ...

  7. MacOSX快捷键

    [MacOSX快捷键] 关闭显示器:Shift + Ctrl + 退出键 休眠:Command + Option + 退出键 关机:Ctrl + Option + Command + 退出键 打开文件 ...

  8. app之间的互相跳转

    第一次写博客,给大家带来的是:iOS开发中不同app之间的跳转,相信很多人也有用过友盟的SDK或者其他的第三方的分享工具,原理都是一样的. 跳转的实现分为四步: 第一步:建立两个工程,模仿两个App的 ...

  9. FATFS文件系统

    STM32移植文件系统,操作SD卡,对SD卡进行读写 FATFS文件系统与底层介质的驱动分离开来,对底层介质的操作都要交给用户去实现,它仅仅是提供了一个函数接口而已,函数为空,要用户添加代码.然后 F ...

  10. [添加用户]解决useradd 用户后没有添加用户Home目录的情况,Linux改变文件或目录的访问权限命令,linux修改用户密码

    将nobody用户添加到nogroup 组:usermod -g nogroup nobody cat /etc/passwd|grep nobodynobody:x:65534:65534:nobo ...