【问题标题】:Get the lowest year from LINQ query results从 LINQ 查询结果中获取最低年份
【发布时间】:2012-09-18 22:36:49
【问题描述】:

我正在尝试从 LINQ 查询返回的一组行中查找最早的年份。 ActivationDate 作为日期时间值存储在数据库中。

我知道我可以进行单独的查询来仅获取日期,但我更愿意使用现有查询的结果,因为它用于其他一些事情。

IEnumerable<MonitoringPanel> panels = from rows in db.MonitoringPanels
                                      where rows.DealerEntity == dealerIDint
                                      select rows;

但是这一直抛出一个错误:

var testDate = panels.Min().ActivationDate;

错误:

System.ArgumentException was unhandled by user code.

即使我尝试选择最低的 PanelNumner(存储为 int),它也会抛出错误,但以下操作确实有效:

var testDate = panels.FirstOrDefault().ActivationDate;

解决方案

        DateTime testDate = (DateTime)panels.Min( thing => thing.ActivationDate);
        int lowYear = testDate.Year;

【问题讨论】:

  • 欢迎,梅森。您似乎忘了提及实际的错误消息?
  • 请提供错误信息。不过,最初,您在事物上使用Min,而不是在第一个实例中查询事物的日期(而应该是panels.Min(thing =&gt; thing.ActivationDate).ActivationDate;

标签: c# sql linq


【解决方案1】:

除非 Enumerable 是外围类型,否则您需要添加一个 lambda 表达式来告诉它要使用类的哪个属性。试试

var testDate = panels.Min(x => x.ActivationDate);

【讨论】:

  • Min 将返回 DateTime (TResult)。那不会编译 ;)
  • 干杯戴夫。我通常会采用 James 建议的排序方法,所以不习惯 Min 的工作方式。
  • 谢谢,得到了我要找的结果DateTime testDate = (DateTime)panels.Min(thing =&gt; thing.ActivationDate); int lowYear = testDate.Year;
【解决方案2】:

我认为您需要告诉Min() 方法要查找的最小值。哪个字段是最小值。

var testDate = panels.Min(panel => panel.ActivationDate);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-05
    • 1970-01-01
    • 2021-02-09
    • 2012-05-16
    • 2011-04-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多