检查列表中的值是否匹配

时间:2013-02-25 21:51:36

标签: c# list

我有2个列表,如下所述

如何验证 lstOldItems 中存在的所有 sitempath 值还存在于 lstNewItems

C#代码

List<ItemsUnderControlObject> lstNewItems
List<ItemsUnderControlObject> lstOldItems


public class ItemsUnderControlObject
{
 public ItemsUnderControlObject();

 public bool bButtonEnabled { get; set; }
 public short iChkInterval { get; set; }
 public int iItemUnderCtrlUniqueID { get; set; }
 public DateTime? ItemCreationDateTime { get; set; }
 public DateTime? ItemLastAccessDateTime { get; set; }
 public DateTime? ItemLastModifiedDateTime { get; set; }
 public long lngItemSize { get; set; }
 public string sItemBackupLocation { get; set; }
 public string sItemcategory { get; set; }
 public string sItemCurrentStatus { get; set; }
 public DateTime sItemDatabaseCreationDateTime { get; set; }
 public string sItemName { get; set; }
 public string sItemPath { get; set; }
 public string sItemRequestStatus { get; set; }
 public string sItemTask { get; set; }
 public string sItemValue { get; set; }
 public string sItemValueSHA256 { get; set; }
 public string sSystemID { get; set; }
}

3 个答案:

答案 0 :(得分:2)

要快速查找,请先将lstNewItems中的项目添加到HashSet,然后再使用All

var set = new HashSet<string>(lstNewItems.Select(x => x.sItemPath));
var res = lstOldItems.All(x => set.Contains(x.sItemPath));

答案 1 :(得分:2)

如果您不想将路径提取到不同的列表,请使用一个班轮:

stOldItems.All(x => lstNewItems.Any(y=> x.sItemPath == y.sItemPath));

答案 2 :(得分:1)

尝试linq,

这个

的内容
List<string> sitempaths = lstNewItems.Select(i => i.sitempath).ToList();

bool hasSitempaths = lstOldItems
    .Where(x => sitempaths.contains(x.sitempath)).ToList()
    .Count == lstOldItems.Count;

请注意,这实际上没有经过测试,您可能需要调整