【问题标题】:How to Select then OrderBy using LINQ?如何使用 LINQ 选择然后 OrderBy?
【发布时间】: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&lt;T&gt;IEnumerable&lt;T&gt;,这是我第一次使用它们。

【问题讨论】:

  • 只需将您的 Select 放在 OrderBy 之后,而不是之前。
  • 检查你的csv日期格式和DateTime.ParseExact(col[7], "dd/MM/yyyy", null)日期格式
  • 我从上面运行了您的示例代码,它对我来说运行良好,所以正如 Mostafizur 所说,您的数据可能有些奇怪?出现错误的行将 x 视为字符串,而不是应有的 CSVEntry。你能告诉我们你的using声明吗?
  • 你确定第一个示例代码块是准确的吗? var results = csvList.OrderBy(x =&gt; x.Date); 不应抛出异常,因为 csvList 是一个 IEnumerable.

标签: c# asp.net .net linq


【解决方案1】:

在您订购记录后添加Select,如下所示

var results = csvList
    .Where(x => x.Grp == "DEFAULT")
    .OrderBy(x => x.Date)
    .Select(x => x.Grp);

【讨论】:

    【解决方案2】:

    Reddy 的回答应该有效,但我会为您解释,这样您就明白为什么会这样了。

    当您使用Select(x =&gt; x.Grp) 语句时,您不再拥有IEnumerable&lt;CSVEntry&gt;。您只有一个 IEnumerable,其中包含 csvList 中的所有 Grp-Entry。因此,当您尝试通过添加 OrderBy(x =&gt; x.Date) 语句按日期对它们进行排序时,Linq 不知道日期属性,因为在此语句中 x 只是一个字符串,而不是 CsvEntry。

    在 Reddys Answer 中,他首先按 Grp == "DEFAULT" 过滤所有条目。之后,他还剩下一个IEnumerable&lt;CsvEntry&gt;,所以他可以在 x.Date 之前订购它们。在那之后,他又一次留下了IEnumerable&lt;CsvEntry&gt;。只有在最后一条语句Select(x =&gt; x.Grp) 语句之后,他还有一个IEnumerable&lt;string&gt;

    希望有帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-07-01
      • 1970-01-01
      • 2021-09-14
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      相关资源
      最近更新 更多