使用 LINQ 查询加入两个列表并仅显示相关数据

Joining Two list using LINQ Query and displaying only relevant data

我是 LINQ 编程和工作的新手,我有两个列表都有不同的数据,我想做的是将它们加入一个单独的列表,然后只显示“黑色”和“白色” “使用 LINQ(Query 或 IQueryable,无论它是什么)的汽车数据是我的代码,它做完全不同的事情

 static void Main(string[] args)
    {
        List<Cars> cars = new List<Cars>();
        cars.Add  (new Cars { Make = "Honda", Model = 2020, Color = "Black"});
        cars.Add  (new Cars { Make = "Suzuki", Model = 2020, Color = "White" });
        cars.Add  (new Cars { Make = "Toyota", Model = 2020, Color = "Green" });
        cars.Add  (new Cars { Make = "Kia", Model = 2020, Color = "Blue" });

        List<MakeBy> makeby = new List<MakeBy>();
        makeby.Add(new MakeBy { Color = "White", Country = "China" });
        makeby.Add(new MakeBy { Color = "Black", Country = "Japan" });
        makeby.Add(new MakeBy { Color = "White", Country = "Japan" });
        makeby.Add(new MakeBy { Color = "White", Country = "Korea" });



        var CombineCars = cars.Zip(makeby, (e, s) => e.Color + "White" + s.Color + "Black");

        foreach(var item in CombineCars)
        {
            Console.WriteLine(item);
        }

        Console.ReadLine();

    }

看看以下是否有效。如果没有,请更准确地说明您需要什么输出。

var CombineCars = cars.Join(maekby,
    c => c.Color,
    m => m.Color,
    (c, m) => new
    {
        carMake = c.Make,
        carModel = c.Model,
        carColor = c.Color,
        makeByColor = m.Color,
        makeByCountry = m.Country
    });

现在您可以像这样访问它:

foreach (var car in CombineCars)
{
    Console.WriteLine($"Car model: {car.carModel}, car make: {car.carMake}"); //and so on
}

尚未测试,但它应该可以满足您的需求。