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
的总和,而列表数据是第一个索引。
答案 0 :(得分:2)
您可以使用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
无效(由于所有条目都是object
s,编译器无法检查,因此有很多地方可以抛出异常或只返回0结果)。