Linq:通过连接两个(或多个)相同类型的字段的值来选择列表



我有以下类:

public class Line
{
public List<Trip> Trips;
}
public class Trip
{
public TimeSpan Departure { get; set; }
public TimeSpan Arrival { get; set; }
}

和对象List<Line> lines.

使用Linq,我试图找到旅行中所有时间的列表,无论它是出发时间还是到达时间,可能没有重复。

例如:

DEPARTURE | ARRIVAL
05:11   |  12:32
08:00   |  11:00
12:32   |  14:00
should return:
05:11
12:32
08:00
11:00
14:00     

我试过这样做:

var l = lines
.SelectMany(t => t.Trips)
.Select(x => x.Departure).Concat(x => x.Arrival);

var l = lines
.SelectMany(t => t.Trips)
.SelectMany(x => new { x.Departure, x.Arrival });

但他们没有工作。

我找到了这个答案,但我不能适应我的情况。

这将为您获得一个TimeSpan数组并删除重复项:

var l = lines.SelectMany(a => a.Trips)
.Select(b => new TimeSpan[] { b.Arrival, b.Departure})
.SelectMany(c => c)
.Distinct()
.ToArray();

如果您想保留副本,请删除对Distinct()的调用

var l = lines.SelectMany(a => a.Trips)
.Select(b => new TimeSpan[] { b.Arrival, b.Departure})
.SelectMany(c => c)
.ToArray();

如果你想要它们Ordered:

var l = lines.SelectMany(a => a.Trips)
.Select(b => new TimeSpan[] { b.Arrival, b.Departure})
.SelectMany(c => c)
.Distinct()
.OrderBy(d => d)
.ToArray();

我想这可能是最简单的方法

List<Line> result = line1.Select(model => model.Departure)
.Union(line2.Select(model => model.Arrival))
.ToList();
var selection = lines.SelectMany(line => line.Trips).Select(t => t);
var distinctFlat = selection.Select(t => t.Arrival).Concat(selection.Select(t => t.Departure)).Distinct().ToList();

最新更新