如何使用 LINQ 联接类型化列表和列表<对象>
本文关键字:列表 对象 类型化 何使用 LINQ | 更新日期: 2023-09-27 17:56:13
public class CoordinatePoint
{
public double x { get; set; }
public double y { get; set; }
}
var Events = new List<CoordinatePoint>();
Events.Add(new CoordinatePoint { x = 1, y = 10 });
Events.Add(new CoordinatePoint { x = 2, y = 20 });
Events.Add(new CoordinatePoint { x = 3, y = 30 });
Events.Add(new CoordinatePoint { x = 4, y = 40 });
Events.Add(new CoordinatePoint { x = 5, y = 50 });
var Data= new List<object>();
CorridorData.Add(new object[] { 1, 11});
CorridorData.Add(new object[] { 2, 21});
CorridorData.Add(new object[] { 3, 31});
CorridorData.Add(new object[] { 4, 41});
CorridorData.Add(new object[] { 5, 51 });
我需要连接这两个列表来计算总和,其中列表事件的主键x
,列表数据是第一个索引。
您可以使用
LINQ.Join
方法来完成您想要的操作(尽管如此,我还是建议您查看您的架构以使代码更清晰):
var result = Events.Join(
CorridorData,
e => (int)e.x,
c => ((object[])c)[0],
(e, c) => new { x = (int)e.x, data = ((object[])c)[1] });
请注意,在您的坐标点中,坐标是double
类型,在您的数据中添加1
int
。因此,如果你想加入它们,你必须将 double 投射到 int(反之亦然),这可能会导致你出现意外的行为。
更新:
如果要获取sum
请使用下一个查询:
var result = Events.Join(
CorridorData,
e => (int)e.x,
c => ((object[])c)[0],
(e, c) => new { x = (int)e.x, data = (int)((object[])c)[1] + e.y });
这将与您在评论中写的内容完全一致:
1, 21.0
2, 41.0
3, 61.0
4, 81.0
5, 101.0
请注意,如果您的list
无效,它可以在很多地方抛出异常或只返回 0 结果(编译器无法检查,因为所有条目都object
s)。