我有一个listA,其中包含具有以下属性x
,y
,z
的对象。
我还有另一个包含类似对象的listB
。
现在我想选择listA
中的所有对象,同时设置z
A.x==B.x && A.y==B.y
属性
List<Point> listA = //list of objects
List<Point> listB = //list of points
我该怎么做?
答案 0 :(得分:1)
要根据您的需要修改listA
,您可以使用以下LINQ:
listA.ForEach(pA => pA.Z = listB.Where(pB => pA.X == pB.X && pA.Y == pB.Y)
.DefaultIfEmpty(pA)
.First()
.Z);
然后您只需选择所有listA
元素。
答案 1 :(得分:0)
不确定以下是否符合您的要求:
using System;
using System.Linq;
using System.Collections.Generic;
class A
{
public double X {get; set;}
public double Y {get; set;}
public double Z {get; set;}
}
class B
{
public double X {get; set;}
public double Y {get; set;}
public double Z {get; set;}
}
public class Program
{
public void Main()
{
var listA = new List<A>
{
new A {X = 1, Y = 2, Z = 3}
};
var listB = new List<B>
{
new B {X = 1, Y = 2, Z = 3}
};
var result = from a in listA
from b in listB
select new A
{
X = a.X,
Y = a.Y,
Z = (a.X == b.X && a.Y == b.Y) == true ? 0 : 10
};
foreach(var r in result)
Console.WriteLine(
String.Format("{0}, {1}, {2}", r.X, r.Y, r.Z));
// output: 1, 2, 0 because a.X == b.X && a.Y == b.Y
}
}
因此Z
根据a.X == b.X && a.Y == b.Y
设置为0。如果不满足此条件,则将其设置为10.您可以明确地确定Z
为您自己设置的内容。