c# – 用于Unpivoting DataTable的Lambda表达式
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 用于Unpivoting DataTable的Lambda表达式,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1534字,纯文字阅读大概需要3分钟。
内容图文
![c# – 用于Unpivoting DataTable的Lambda表达式](/upload/InfoBanner/zyjiaocheng/781/77b9c4c3593e47dba4eda39c0f4cb2d1.jpg)
我正在以下列格式从Excel工作表中读取数据 –
我需要以下列方式存储数据 –
我试图在Linq lambda表达的帮助下做到这一点,但我想我没有得到这个.
我尝试了什么 –
DataTable dataTable= ReadExcel();
var dt = dataTable.AsEnumerable();
var resultSet = dt.Where(x => !String.IsNullOrEmpty(x.Field<String>("Project_Code")))
.GroupBy(x =>
new
{
Month = x.Field<String>("Month"),
ProjectCode = x.Field<String>("Project_Code"),
//change designation columns into row data and then group on it
//Designation =
}
);
//.Select(p =>
// new
// {
// Month= p.d
// }
// );`
解决方法:
我会使用ToDictionary和一组预定义的指定名称:
private static readonly string[] designationNames = {"PA","A","SA","M","SM","CON"};
void Function()
{
/* ... */
var resultSet = dt.AsEnumerable().Where(x => !String.IsNullOrEmpty(x.Field<String>("Project_Code")))
.Select(x =>
new
{
Month = x.Field<String>("Month"),
ProjectCode = x.Field<String>("Project_Code"),
Designations = designationNames.ToDictionary(d => d, d => x.Field<int>(d))
}
);
}
这是规范化版本.如果你想要它平坦,请使用:
private static readonly string[] designationNames = {"PA","A","SA","M","SM","CON"};
void Function()
{
/* ... */
var resultSet = dt.AsEnumerable().Where(x => !String.IsNullOrEmpty(x.Field<String>("Project_Code")))
.Select(x =>
designationNames.Select(
d =>
new
{
Month = x.Field<String>("Month"),
ProjectCode = x.Field<String>("Project_Code"),
Designation = d,
Count = x.Field<int>(d)
}
)
).SelectMany(x => x).ToList();
}
如果类型不总是int,那么您可能希望使用x.Field< String>(d)来检查有效性.
内容总结
以上是互联网集市为您收集整理的c# – 用于Unpivoting DataTable的Lambda表达式全部内容,希望文章能够帮你解决c# – 用于Unpivoting DataTable的Lambda表达式所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。