设置列表的特定值:LINQ

时间:2014-01-21 20:22:17

标签: linq

我有一个listA,其中包含具有以下属性xyz的对象。 我还有另一个包含类似对象的listB

现在我想选择listA中的所有对象,同时设置z

对象的A.x==B.x && A.y==B.y属性
List<Point> listA = //list of objects
List<Point> listB = //list of points

我该怎么做?

2 个答案:

答案 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为您自己设置的内容。