我有以下代码:
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/