首页 > 解决方案 > 搜索多个列表并更新另一个列表中的字段

问题描述

我有 3 个项目列表,这些项目将用于更新另一个列表中的对象。

public class Item1
{
   public string A
   public string B
   public string C
   public string D
   public string E
}

public class Item2
{
   public string A
   public string B
   public string D
   public string E
}

public class Item3
{
   public string A
   public string C
   public string D
   public string E
}

public class ObjectToUpdate
{
   public string A
   public string B
   public string C
   public string D
   public string E
}

使用此标准更新对象列表的最快方法是什么?

如果对象中的 A、B、C 与 Item1 中的 A、B、C 匹配,则设置 D 和 E 等于项目 1 中的 D 和 E。

否则,如果对象中的 A、B 与 Item2 中的 A、B 匹配,则设置 D 和 E 等于项目 2 中的 D 和 E。

否则,如果对象中的 A、C 与 Item3 中的 A、C 匹配,则设置 D 和 E 等于项目 3 中的 D 和 E。

所有这些都在列表中。

List<Item1> list1
List<Item2> list2
List<Item3> list3
List<ObjectToUpdate> objectsToUpdate

添加尝试:

        foreach (var item in objectsToUpdate)
        {
            var a = list1.FirstOrDefault(l => l.A == item.A && l.B== item.B && l.C== item.C);

            if(a != null)
            {
                item.D= a.D;
                item.E= a.E;
            }
            else
            {
                var b = list2.FirstOrDefault(l => l.A == item.A && l.B == item.B);

                if(b != null)
                {
                    item.D= b.D;
                    item.E= b.E;
                }
                else
                {
                    var c = list3.FirstOrDefault(l => l.A == item.A && l.C == item.C);

                    if (c != null)
                    {
                        item.D= c.D;
                        item.E= c.E;
                    }

                }
            }
        }

标签: c#.netlinq

解决方案


 foreach (var item in objectsToUpdate)
            {
                var a = list1.Where(l => l.A == item.A && l.B == item.B && l.C == item.C).ToList();

                if(a != null)
                {
                    foreach(var x in a)
                    {
                       item.D = x.D;
                       item.E = x.E;
                    }
                }


                var b = list2.Where(l => l.A == item.A && l.B == item.B).ToList();

                if(b != null)
                {
                    foreach(var x in b)
                    {
                       item.D = x.D;
                       item.E = x.E;
                    }

                }


                var c = list3.Where(l => l.A == item.A && l.C == item.C).ToList();

                if (c != null)
                {
                    foreach(var x in c)
                    {
                       item.D = x.D;
                       item.E = x.E;
                    }
                }

            }

推荐阅读