首页 > 解决方案 > 复制匹配 id 的值

问题描述

首先,阅读下面的类代码。在那里你会发现一个名为 CommonId 的属性,它在 Item 类和 ItemGallery 中很常见,并且都具有匹配的 int 值。现在检查作为主控制台程序的 Program 类。在这里,我向这两个类添加了一些数据以作为示例。在主程序类的底部,我试图遍历每个项目并找到它的 commonId 与 ItemGallery commonId 匹配,如果该 commonId 匹配然后在 ItemGallery ItemId 将从其匹配的项目 Id 中复制。主要目标是 - 只需将 Item 类 Id 的副本复制到具有匹配 commonId 的 ItemGallery ItemId。怎么做?我已经尝试过像下面这样的 foreach ,但这不是正确的方法。

主程序类:

class Program {
        static void Main(string[] args) {
            List<Item> MyItemList = new List<Item>();
            MyItemList.Add(new Item {
                CommonId = 502,
                Id = 3,
                Link = "some string1"
            });

            MyItemList.Add(new Item {
                CommonId = 502,
                Id = 4,
                Link = "some string2"
            });

            MyItemList.Add(new Item {
                CommonId = 502,
                Id = 5,
                Link = "some string3"
            });

            MyItemList.Add(new Item {
                CommonId = 506,
                Id = 6,
                Link = "some string4"
            });

            List<ItemGallery> MyitemGalleries = new List<ItemGallery>();
            MyitemGalleries.Add(new ItemGallery {
                CommonId = 502,
                Link = "",
            });
            MyitemGalleries.Add(new ItemGallery {
                CommonId = 502,
                Link = "",
            });
            MyitemGalleries.Add(new ItemGallery {
                CommonId = 502,
                Link = "",
            });

            foreach (var _MyItemList in MyItemList) {
                MyitemGalleries.FirstOrDefault().ItemId = _MyItemList.Where(x => x.CommonId == MyitemGalleries.CommonId).FirstOrDefault().Id;
            }
            Console.ReadKey();
        }
    }

班级:

class Item {
    public int Id { get; set; }//this id need to set to ItemGallery ItemId matching their CommonId
    public int CommonId { get; set; }
    public string Link { get; set; }
}

class ItemGallery {
    public int ItemId { get; set; }
    public int CommonId { get; set; }
    public string Link { get; set; }
}

标签: c#

解决方案


如果我理解你并且忽略任何其他问题,那么几乎没有办法做到这一点。但是,一个简单的foreachFirstOrDefault应该做的

foreach (var gallery in MyitemGalleries) 
{
    var item = _MyItemList.FirstOrDefault(x => x.CommonId == gallery.CommonId);
    // note if there are none we choose not to do anything, or grab the first
    if(item == null)
       continue;

    gallery.ItemId = item.Id;
}

推荐阅读