如何解决LINQ如何以列表形式返回分组?
我有一个数据表,其中填充了2列,即DateTime和Data。我已经可以使用以下方式对列表进行分组:
var dates = table.AsEnumerable().GroupBy(x => Convert.ToDateTime(x["DateTime"]).ToShortDateString());
该转换是删除日期时间的“时间”部分,因为我每天只需要1个日期,以便可以对其进行迭代。
在调试过程中,我可以看到LINQ可以正常工作,但是我几乎没有LINQ的经验,也不知道如何以可迭代的方式返回这些结果。
在我的LINQ语句下面:
foreach (string date in dates) {
string dummy2 = "";
}
在foreach
上显示错误
Cannot convert type 'System.Linq.IGrouping<string,System.Data.DataRow>' to 'string'
这里的目标是返回一个唯一的日期列表,我可以对其进行迭代以对数据表执行其他处理/ LINQ查询
解决方法
如果要列出唯一的日期,则可以执行以下操作。
var dates = table.Select(x => Convert.ToDateTime(x["DateTime"]).ToShortDateString()).Distinct();
,
如果只需要日期,则不需要使用GroupBy
,可以使用Distinct
。另外,只需抓住DateTime
属性即可将它们作为Date
对象获得,该属性具有归零的时间分量:
IEnumerable<DateTime> distinctDates = table.AsEnumerable()
.Select(x => Convert.ToDateTime(x["DateTime"]).Date)
.Distinct();
如果要分组,但只是想从分组中选择日期字符串,则要使用分组的Key
属性,该属性用于对项目进行分组:>
IEnumerable<IGrouping<string,System.Data.DataRow>> dates = table.AsEnumerable()
.GroupBy(x => Convert.ToDateTime(x["DateTime"]).ToShortDateString());
List<string> distinctDates = dates.Select(date => date.Key).ToList();
请注意,除非您知道某物返回的数据类型,否则您可能会避免使用var
,因为这掩盖了dates
不是字符串集合的事实。 / p>
之所以发生这种情况,是因为错误表明您正在尝试循环访问字典:
Cannot convert type 'System.Linq.IGrouping<string,System.Data.DataRow>' to 'string'
您可以做的是在GroupBy
语句中添加select
部分:
var dates = table.AsEnumerable().GroupBy(x => Convert.ToDateTime(x["DateTime"]).ToShortDateString()).Select(x=> x.date);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。