当前位置:网站首页>DataTable使用Linq进行分组汇总,将Linq结果集转化为DataTable
DataTable使用Linq进行分组汇总,将Linq结果集转化为DataTable
2022-08-04 04:42:00 【 浊尘】
DataTable使用Linq进行分组汇总
var dt1=dt.AsEnumerable();
var result1= from r in dt1
group r by new {
FPJCABASENUMBER = r.Field<string>("FPJCABASENUMBER"),
FMATERIALNUMBER2 = r.Field<string>("FMATERIALNUMBER2") ,
FINVFBaseQty=r.Field<decimal>("FINVFBaseQty"),
FSAFESTOCK = r.Field<decimal>("FSAFESTOCK"),
//FMUSTQTY = r.Field<decimal>("FMUSTQTY"),
//FQUELIAO = r.Field<decimal>("FQUELIAO"),
//FPOORECEIVEQTY = r.Field<decimal>("FPOORECEIVEQTY"),
//FTPINSTOCKFQTY = r.Field<decimal>("FTPINSTOCKFQTY"),
//FPOPRENOSTOCKQTY = r.Field<decimal>("FPOPRENOSTOCKQTY"),
//FTPMEFQTY = r.Field<decimal>("FTPMEFQTY"),
}
into m
select new
{
FPJCABASENUMBER = m.Key.FPJCABASENUMBER,
FMATERIALNUMBER2 = m.Key.FMATERIALNUMBER2,
FINVFBaseQty = m.Key.FINVFBaseQty,
FSAFESTOCK = m.Key.FSAFESTOCK,
FMUSTQTY = m.Sum(x=>x.Field<decimal>("FMUSTQTY")),
FQUELIAO = m.Sum(x=>x.Field<decimal>("FQUELIAO")),
FPOORECEIVEQTY = m.Sum(x=>x.Field<decimal>("FPOORECEIVEQTY")),
FTPINSTOCKFQTY = m.Sum(x=>x.Field<decimal>("FTPINSTOCKFQTY")),
FPOPRENOSTOCKQTY = m.Sum(x=>x.Field<decimal>("FPOPRENOSTOCKQTY")),
FTPMEFQTY = m.Sum(x=>x.Field<decimal>("FTPMEFQTY")),
};
var resultTable = LINQToDataTable(result1);
将Linq结果集转化为DataTable
/// <summary>
/// 将IEnumerable<T>类型的集合转换为DataTable类型
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="varlist"></param>
/// <returns></returns>
public DataTable LINQToDataTable<T>(IEnumerable<T> varlist)
{
//定义要返回的DataTable对象
DataTable dtReturn = new DataTable();
// 保存列集合的属性信息数组
PropertyInfo[] oProps = null;
if (varlist == null) return dtReturn;//安全性检查
//循环遍历集合,使用反射获取类型的属性信息
foreach (T rec in varlist)
{
//使用反射获取T类型的属性信息,返回一个PropertyInfo类型的集合
if (oProps == null)
{
oProps = ((Type)rec.GetType()).GetProperties();
//循环PropertyInfo数组
foreach (PropertyInfo pi in oProps)
{
Type colType = pi.PropertyType;//得到属性的类型
//如果属性为泛型类型
if ((colType.IsGenericType) && (colType.GetGenericTypeDefinition()
== typeof(Nullable<>)))
{
//获取泛型类型的参数
colType = colType.GetGenericArguments()[0];
}
//将类型的属性名称与属性类型作为DataTable的列数据
dtReturn.Columns.Add(new DataColumn(pi.Name, colType));
}
}
//新建一个用于添加到DataTable中的DataRow对象
DataRow dr = dtReturn.NewRow();
//循环遍历属性集合
foreach (PropertyInfo pi in oProps)
{
//为DataRow中的指定列赋值
dr[pi.Name] = pi.GetValue(rec, null) == null ?
DBNull.Value : pi.GetValue(rec, null);
}
//将具有结果值的DataRow添加到DataTable集合中
dtReturn.Rows.Add(dr);
}
return dtReturn;//返回DataTable对象
}
边栏推荐
- JVM Notes
- QT 如何识别文件的编码格式
- 7-3 LVS+Keepalived集群叙述与部署
- Jenkins export and import Job Pipeline
- PL/SQL Some Advanced Fundamental
- Embedded database development programming MySQL (full)
- This Thursday evening at 19:00, the fourth live broadcast of knowledge empowerment丨The realization of equipment control of OpenHarmony smart home project
- Oracle与Postgresql在PLSQL内事务回滚的重大差异
- Mini program + e-commerce, fun new retail
- 看DevExpress丰富图表样式,如何为基金公司业务创新赋能
猜你喜欢

10 Convolutional Neural Networks for Deep Learning 3

将xml标签转换为txt(voc格式转换为yolo方便进行训练)

System design. How to design a spike system (full version transfer)
2022年软件测试——精选金融银行面试真题

马尔可夫链

目标检测-中篇

sql语句查询String类型字段小于10的怎么查

文件内容的操作

外卖店优先级

See how DevExpress enriches chart styles and how it empowers fund companies to innovate their business
随机推荐
Stop behind.
【Ryerson情感说话/歌唱视听数据集(RAVDESS) 】
企业直播风起:目睹聚焦产品,微赞拥抱生态
day13--postman接口测试
Eight guiding principles to help businesses achieve digital transformation success
基于 SSE 实现服务端消息主动推送解决方案
七夕节,我用代码制作了表白信封
redis中常见的面试题
Shell 函数
How to systematically plan and learn software testing?
某母婴小程序加密参数解密
mysql索引笔记
Basic characteristics of TL431 and oscillator circuit
3000 words, is take you understand machine learning!
How to open a CITIC Securities online account?is it safe?
Hangdian Multi-School-Slipper- (tree map conversion + virtual point mapping)
【机器学习】21天挑战赛学习笔记(一)
类如何只能静态分配和只能动态分配
打造一份优雅的简历
System design. How to design a spike system (full version transfer)