c# - 如何使用 LINQ 仅获取最后一个日期

标签 c# linq

我有以下代码:

public class ModelData
{
    public string name;
    public DateTime DT;
    public int real;
    public int trade;
    public int position;
    public int dayPnl;
    public double ATR;
    public double C2C;
    public double C;
}

List<ModelData> modelData;

var priorDateRealTrades = modelData
        .Where(x => x.DT.Date <= aDate.Date)
        .OrderBy(x => x.DT.Date)
        .ToArray();

我真的只想在哪里为每个“名称”选择 1 个元素。

我的查询为我提供了具有先前日期的所有元素,然后对它们进行排序。

我如何才能为每个“名称”返回一个元素(最近的先前日期)?

最佳答案

使用 GroupBy() 和 FirstOrDefault()

var priorDateRealTrades = modelData
  .GroupBy(d => d.Name)
  .Select(gd => gd.Where(x => x.DT.Date <= aDate.Date)
    .OrderBy(x => x.DT.Date)
    .First())
  .ToList()

这将按名称分组,然后选择每组第一个 orderd/where'd。如果没有记录匹配日期/条件,这将引发异常。这可能是一个要求...

var priorDateRealTrades = modelData
  .GroupBy(d => d.Name)
  .Select(gd => gd.Where(x => x.DT.Date <= aDate.Date)
    .OrderBy(x => x.DT.Date)
    .FirstOrDefault())
  .Where(d => d != null)
  .ToList()

这将执行与之前相同的操作,但还会过滤掉没有日期匹配的结果(它们将为空)并且不会抛出异常。

关于c# - 如何使用 LINQ 仅获取最后一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36749876/

相关文章:

c# - Linq 获取所有控件(有序)

C# - Linq 多对多与联结表

c# - WPF 中等效的 KeyPress 事件

c# - 使用microsoft speech recognition,我能得到语法识别到一半的时间吗?

c# - C#中的Unicode bidi文本算法?

c# - 将大量参数传递到配置对话框的最佳方式

c# - Sql查询与Linq数据查询性能对比

c# - 使用基于 DLR 的语言而不是 C# 来执行脚本任务的原因是什么?

c# - 根据过滤列表计算列表中每条记录的总计

c# - 使用动态 LINQ 的空表达式