一对多映射关系

 /// <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. windows分屏

    一.准备 主机.显示屏A.显示屏B.DVI连接线2根 二.操作步骤 1.使用DVI连接线将显示屏A连接到主机上,开机进入windows系统(演示用的是win 7)(若已连接,请跳到第2步.基本上这一步 ...

  2. 转】使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法

    原博文出自于: http://www.cnblogs.com/xdp-gacl/p/4239006.html 感谢! 一.问题描述 今天在MyEclipse中使用Maven编译项目源代码时,结果如下了 ...

  3. CentOS6.5(带图形安装)在使用过程中遇到的一些网络问题迷惑

    比如,经常会遇到这样的问题************************** [root@SourceCompiler local]# pwd/usr/local[root@SourceCompil ...

  4. Codeforces Round #367 (Div. 2) D. Vasiliy's Multiset (0/1-Trie树)

    Vasiliy's Multiset 题目链接: http://codeforces.com/contest/706/problem/D Description Author has gone out ...

  5. C++11无限制的unions

    [C++11无限制的unions] 在标准 C++ 中,并非任意的类型都能做为 union 的成员.比方说,带有 non-trivial 构造函数的类型就不能是 union 的成员.在新的标准里,移除 ...

  6. jQuery - Chaining

    jQuery - Chaining @(编程) 通过 jQuery,您可以把动作/方法链接起来. Chaining 允许我们在一条语句中允许多个 jQuery 方法(在相同的元素上). jQuery ...

  7. Gradle 1.3之前的Publishing artifacts

    在Gradle1.3之前,Publishing artifacts是使用uploadConfigurationName来publish 声明artifacts是靠使用 build.gradle art ...

  8. 使用aspose.word两句代码将word转换为pdf

    //Load Document Document document = new Document(@"C:\Users\Administrator\Desktop\人事---新员工转正总结( ...

  9. HDU 3364 Lanterns (高斯消元)

    题意:有n个灯和m个开关,每个开关控制数个灯的状态改变,给出k条询问,问使灯的状态变为询问中的状态有多少种发法. 析:同余高斯消元法,模板题,将每个开关控制每个灯列成行列式,最终状态是结果列,同余高斯 ...

  10. sql表设计器的几个默认值

    sql表设计器的几个默认值: 空字符串‘’(注意是单引号) 当前时间getdate() 逻辑值0或1 汉字或英文字符串需在前面加大写N,并用单引号引起如: N'已发货'