我一直在尝试和失败一段时间找到一个解决方案来比较基于对象属性的对象列表.我已经阅读了其他类似的解决方案,但它们要么不合适(或者我不理解答案!).
代码是C#
我有一个代表图像的模型
public class AccommodationImageModel
{
public int Id { get; set; }
public string Path { get; set; }
public string Caption { get; set; }
public string Description { get; set; }
public bool CoverImage { get; set; }
public bool Visible { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我有两个这个模型的列表.一个是现有列表,另一个是更新列表.我需要比较两个列表,看看哪些已被删除,更新或是新的.
我不需要比较整个对象,只需在它们的属性Id上进行比较.
List<AccommodationImageModel> masterList;
List<AccommodationImageModel> compareList;
Run Code Online (Sandbox Code Playgroud)
如果compareList包含Id = 0的任何AccommodationImageModel,则它们是新的,因为新条目尚未分配Id.
如果masterList包含任何具有不在compareList中的Ids的AccommodationImageModel,那么它们将被删除,因为它们已从compareList中删除并应从masterList中删除.因此,我需要一个需要删除的列表.
如果newList和masterList具有相同的Id,那么它们将被更新.因此,我需要一个共享相同ID的列表,所以我可以更新它们.我不太关心这些模型是否相同且不需要更新,因为每个列表只会有一个小数字,所以即使它们没有改变它们也会更新并不重要.
三个结果中的每一个都需要作为AccommodationImageModel列表返回,以便我可以执行相应的更新,删除,添加.
我在下面用我选择的ATM解决方案添加了3种测试方法,展示了它的工作实现.
[TestMethod]
public void Test_Deleted_Image()
{
// set up the masterList
List<AccommodationImageModel> masterList …Run Code Online (Sandbox Code Playgroud)