【发布时间】:2016-05-13 09:01:28
【问题描述】:
我正在尝试使用之前发布的question 中的以下代码根据日期对 CSV 文件的内容进行排序:
private class CSVEntry
{
public DateTime Date { get; set; }
public string Grp { get; set; }
}
...
List<CSVEntry> csvList = new List<CSVEntry>();
csvList.Add(new CSVEntry() { Date = DateTime.ParseExact(col[7], "dd/MM/yyyy", null), Grp = col[9] });
var results = csvList.OrderBy(x => x.Date); // An error occurs at "Date".
...
但是我收到了这个错误:
“字符串”不包含“日期”的定义,并且找不到接受“字符串”类型的第一个参数的扩展方法“日期”。
我希望输出的是其他列中的字符串,但按时间顺序排序。当我尝试使用此代码显示日期时:
var results = csvList.Where(x => x.Grp == "DEFAULT").OrderBy(x => x.Date);
它与按时间顺序排序的日期完美配合。但是,这次我不想显示日期。我想显示其他列中的字符串,就像我上面提到的那样。我尝试使用
var results = csvList.Select(x => x.Grp).OrderBy(x => x.Date);
但也遇到了同样的错误。我哪里做错了?我是 LINQ 新手,不熟悉 List<T> 和 IEnumerable<T>,这是我第一次使用它们。
【问题讨论】:
-
只需将您的 Select 放在 OrderBy 之后,而不是之前。
-
检查你的csv日期格式和
DateTime.ParseExact(col[7], "dd/MM/yyyy", null)日期格式 -
我从上面运行了您的示例代码,它对我来说运行良好,所以正如 Mostafizur 所说,您的数据可能有些奇怪?出现错误的行将
x视为字符串,而不是应有的 CSVEntry。你能告诉我们你的using声明吗? -
你确定第一个示例代码块是准确的吗?
var results = csvList.OrderBy(x => x.Date);不应抛出异常,因为 csvList 是一个 IEnumerable.