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等单词.这时就需要查询扩 ...
随机推荐
- Python的数据处理学习(三)
三.类的继承 Python 的class可以允许从零开始创建一个定制类,就像文章(二)创建Athlete类一样,也可以通过继承现有的其他类类创建一个类,这也包括用List.set和dict提供的p ...
- Windows Azure存储容器私有,公共容器,公共Blob的区别
当我们在Windows Azure中创建或编辑存储的容器时,需要选择访问类型,本文将描述一下这三个选项的区别. 1. 私有: 默认选项,顾名思义,用户不能通过URL匿名进行访问容器或容器内的任何Blo ...
- DataGrid Column Group (合并表头)
<thead> <tr> <th colspan=">swjg</th> <th colspan=">swbm</ ...
- Working with Sprites
[Working with Sprites] 1.An SKSpriteNode object can be drawn either as a rectangle with a texture ma ...
- thinkphp,ajax返回结果
thinkphp 在Action中 利用dump输出的是<pre>success</pre> 利用echo输出的是 success 1.html eventResize: fu ...
- Weka EM 协方差
Weka EM covariance description 1: Dear All, I am trying to find out what is the real meaning of the ...
- C#扫描仪编程、条形码识别编程资料
扫描仪编程资料:http://www.cnblogs.com/wubh/archive/2011/11/07/2239178.html 图片条形码识别资料:http://www.codeproject ...
- 【转】Android -- Looper.prepare()和Looper.loop()
Looper.prepare()和Looper.loop() 原文地址:http://blog.csdn.net/heng615975867/article/details/9194219 Andro ...
- 使用Office-Word的博客发布功能(测试博文)
本人打算在博客园开博,但平时收集和整理资料都在OneNote中,又不想在写博客时还要进行复制粘贴操作,于是就想到了Microsoft Office自带的博客发布功能.在此做了一下测试,发布了此博文. ...
- (剑指Offer)面试题26:复杂链表的复制
题目: 请实现函数ComplexListNode* Clone(ComplexListNode* pHead),复制一个复杂链表. 在复杂链表中,每个结点除了有一个pNext指针指向下一个结点之外,还 ...