【积累】LinqToSql复合查询结果转DataTable数据
最近的项目用到了大量的复合查询结果用于数据源,绑定到数据控件上。
为了方便,我们把它转换成DataTable的数据源形式。请看下面的示例:
1)思考自己需要的数据,然后组合,因此创建一个新的类:
/// <summary>
/// the DTO for role group mapping
/// </summary>
public class GroupByRole
{
/// <summary>
/// this Id
/// </summary>
public int Id { get; set; }
/// <summary>
/// this SFGroupCode
/// </summary>
public string SFGroupCode { get; set; }
/// <summary>
/// this ParentFunctionId
/// </summary>
public int RoleId { get; set; }
/// <summary>
/// this DisplayDescription
/// </summary>
public string DisplayDescription { get; set; }
/// <summary>
/// this SFGroupName
/// </summary>
public string SFGroupName { get; set; }
/// <summary>
/// this IsDefaultFunction
/// </summary>
public bool IsReadable { get; set; }
/// <summary>
/// this FunctionType
/// </summary>
public bool IsEditable { get; set; }
}
上面的类就是 我需要的 所以表的数据集合。
2)下面的方法是类转表的方法(需要添加 System.Reflection 命名空间引用):
/// <summary>
/// get a empty datatable by a object
/// </summary>
/// <param name="dataType"></param>
/// <returns></returns>
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Reliability", "CA2000:Dispose objects before losing scope")]
protected static DataTable GetDataTableSchema(Type dataType)
{
if (dataType == null) throw new ArgumentNullException("dataType"); DataTable dt = new DataTable();
dt.Locale = System.Globalization.CultureInfo.InvariantCulture;
Type tType = dataType;
PropertyInfo[] propertys = tType.GetProperties();
for (int i = 0; i < propertys.Length; i++)
{
string columnName = propertys[i].Name;
if (!dt.Columns.Contains(columnName))
{
dt.Columns.Add(columnName);
}
}
return dt;
}
3)下面的方法就是用Linqtosql语法查询出来的结果,并且调用 2)的方法转成DataTable:
/// <summary>
/// get Role Group Mapping
/// </summary>
/// <param name="roleId"></param>
/// <returns></returns>
public DataTable GetRoleGroupMappingByRole(int roleId)
{
//用于查询的源数据
IList<SFGroup> groups = SFGroupService.ActiveSFGroups();
IList<SecurityRole> roles = SecurityRoleService.ActiveRoles();
IList<SecurityRoleSFGroupMapping> roleGroups = RoleSFGroupRightsManagementService.GetActiveGroups();
//复合查询结果集
var result = from mapp in roleGroups
join srole in roles on mapp.RoleId equals srole.Id
join sfgroup in groups on mapp.SFGroupCode equals sfgroup.SFGroupCode
where srole.Id == roleId
select new { mapp.Id, mapp.SFGroupCode, sfgroup.SFGroupName, mapp.RoleId, srole.DisplayDescription, mapp.IsEditable, mapp.IsReadable };
//创建table空模板
DataTable dt = GetDataTableSchema(typeof(GroupByRole));
//把结果转成table数据形式
foreach (var rfm in result)
{
DataRow dr = dt.NewRow();
DataColumnCollection dcl = dt.Columns;
foreach (DataColumn dc in dcl)
{
dr[dc.ColumnName] = rfm.GetType().GetProperty(dc.ColumnName).GetValue(rfm, null);
}
dt.Rows.Add(dr);
}
return dt;
}
介绍完毕。
这个方法是我新学到的,拿出来给那些没有接触过的程序猿看看,也方便自己查找。
喜欢就收藏下吧,哈哈,我文笔不行,如果大家有不明白的地方可以交流。
^_^
【积累】LinqToSql复合查询结果转DataTable数据的更多相关文章
- DataTable数据转换为实体
我们在用三层架构编写软件时,常常会遇到例如以下问题,就是三层之间的參数传递问题:假设我们在D层查询出数据是DataTable类型的,那么我们在B层甚至U层使用这条数据时,就要用DataTable类型来 ...
- 关于SQL查询效率,100w数据,查询只要1秒
1.关于SQL查询效率,100w数据,查询只要1秒,与您分享:机器情况p4: 2.4内存: 1 Gos: windows 2003数据库: ms sql server 2000目的: 查询性能测试,比 ...
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- linq根据传入数据集合查询对应子级数据
工作中经常用到的linq根据传入数据集合查询对应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点对应ID数据集合,再根据ID数据集合查询全部子级数据. //获取缓存数据 ...
- EF 查询视图出现重复数据
解决方案: 由多张表组成的视图,要加实体键.而且实体键组合要能确保唯一性. 个人理解:确保唯一性,一个或多个实体键,实现了复合主键或组合主键的效果. 这样查询是,延迟加载机制,才知道哪些需要重新从数据 ...
- linq依据传入数据集合查询相应子级数据
工作中经经常使用到的linq依据传入数据集合查询相应子级数据,整理共享,希望大家都能用得上,代码中doublesArray 为父节点相应ID数据集合,再依据ID数据集合查询所有子级数据. //获取缓存 ...
- bootstrap datatable 数据刷新问题
在项目中,页面初始化的时候,通过通过向后台请求数据,页面初始化完之后,datatable是有数据的,当我点击页面的搜索按钮(按照时间过滤数据),datatable的数据要能重新刷新或者重载:这一点,我 ...
- Elasticsearch(7) --- 复合查询
Elasticsearch(7) ---复合查询 复合查询有:bool query(布尔查询).boosting query(提高查询).constant_score(固定分数查询).dis_max( ...
- Es学习第九课, 聚合查询和复合查询
ES除了实现前几课的基本查询,也可以实现类似关系型数据库的聚合查询,如平均值sum.最小值min.最大值max等等 我们就用上一课的数据作为参考来举例 聚合查询 sum聚合 sum是一个求累加值的聚合 ...
随机推荐
- [HP-UNIX]bdf命令总结
(1)bdf命令的效果 lijiaman$[/home/oracle]bdf Filesystem kbytes used avail %used Mounted on /dev/vg00/lvol3 ...
- git使用过程的问题与解决办法
一.什么是Git Git是目前世界上最先进的分布式版本控制系统.工作原理 / 流程: Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote ...
- Django快速开发投票系统
使用Django搭建简单的投票系统:这个是官网的教程:https://docs.djangoproject.com/en/2.0/intro/tutorial01/ 在Run manage.py Ta ...
- 【shell脚本学习-3】
part-1 #!/bin/bash:<<FTP#test [ 1 -eq 2] #条件测试x="abc" #不允许有空格y="abc" [ &qu ...
- scala成长之路(5)问题记录
还是在看scala sdk源码的时候,有很多问题要考自己慢慢摸索,这里做个记录. 一. 隐式转换的作用域? 隐式转换需要三个因素 1. 己方(当前对象) 2. 转换函数 3. 对方(转换的目标类) 这 ...
- CentOS下禁止防火墙
CentOS下禁止防火墙 1.使用如下命令安装iptables-services. yum install -y iptables-services 2.关闭防火墙. service iptables ...
- Python特别low的一个文字游戏
闲来无事 ,调侃舍友的游戏 import os class Role(): def __init__(self,name,sex,fighting): self.name=name self.sex= ...
- springMVC3
复习: springmvc框架: DispatcherServlet前端控制器:接收request,进行response HandlerMapping处理器映射器:根据url查找Handler.(可以 ...
- oracle杀死锁表的进程(转发+合并+自己实践)
之一: Oracle数据库操作中,我们有时会用到锁表查询以及解锁和kill进程等操作 (1)锁表查询的代码有以下的形式:select count(*) from v$locked_object;sel ...
- Python的异常
一.异常的常用形式 异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行.一般情况下,在Python无法正常处理程序时就会发生一个异常.异常是Python对象,表示一个错误.当Pyth ...