use*_*613 4 .net c# linq asp.net
我正在尝试使用之前发布的问题中的以下代码根据日期对 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".
...
Run Code Online (Sandbox Code Playgroud)
但我收到了这个错误:
“string”不包含“Date”的定义,并且找不到接受“string”类型的第一个参数的扩展方法“Date”。
我想要的输出是来自其他列但按时间顺序排序的字符串。当我尝试使用此代码显示日期时:
var results = csvList.Where(x => x.Grp == "DEFAULT").OrderBy(x => x.Date);
Run Code Online (Sandbox Code Playgroud)
它与输出完美配合,因为日期按时间顺序排序。但是,这次我不想显示日期。我想像我上面提到的那样显示来自其他列的字符串。我尝试使用
var results = csvList.Select(x => x.Grp).OrderBy(x => x.Date);
Run Code Online (Sandbox Code Playgroud)
但也得到了同样的错误。我哪里错了?我是 LINQ 的新手,不熟悉List<T>and IEnumerable<T>,这是我第一次使用它们。
Raj*_*ddy 12
Select在您的订单后添加记录,如下所示
var results = csvList
.Where(x => x.Grp == "DEFAULT")
.OrderBy(x => x.Date)
.Select(x => x.Grp);
Run Code Online (Sandbox Code Playgroud)
小智 5
雷迪的回答应该有效,但我会为你解释,所以你明白为什么会这样。
当您使用Select(x => x.Grp)Statement 时,您将不再拥有 a IEnumerable<CSVEntry>。您只有一个包含 csvList 中所有 Grp-Entrys 的 IEnumerable。因此,当您尝试通过添加OrderBy(x => x.Date)语句按日期对它们进行排序时,Linq 不知道日期属性,因为在此语句中 x 只是一个字符串,而不是 CsvEntry。
在 Reddys Answer 中,他首先按 过滤所有条目Grp == "DEFAULT"。之后他有一个IEnumerable<CsvEntry>左,所以他可以按 x.Date 订购它们。在那之后,他还有一个IEnumerable<CsvEntry>左边。只有在最后一个Statement之后,Select(x => x.Grp)Statement,他才有了IEnumerable<string>左边。
希望有帮助:)
| 归档时间: |
|
| 查看次数: |
20005 次 |
| 最近记录: |