我有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; }
}
答案 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;
请注意,这实际上没有经过测试,您可能需要调整