我在尝试检查两个列表中的重复时遇到了一些问题。我想要做的是检查distSPUItem是否包含prodSubstitute列表中的ID,然后执行一些操作。这是代码:
List<ProductPacking> prodSubstitute = new List<ProductPacking>();
List<DistributionStandardPackingUnitItems> distSPUItem = new List<DistributionStandardPackingUnitItems>();
for (int count = 0; count < prodSubstitute.Count; count++)
{
if (!distSPUItem.Contains(prodSubstitute[count].id))
{
//Perform something here
}
}
然而它告诉我最好的重载方法.Contain有无效的参数。任何指南?提前谢谢。
答案 0 :(得分:4)
您的列表distSPUItem仅包含DistributionStandardPackingUnitItems类型的对象,但是您要检查列表是否包含int-variable(您的ID)。在.Contains方法中,您需要传递一个DistributionStandardPackingUnitItems类型的对象,以及。
如果您只想检查ID,可以使用LINQ
if(!distSPUItem.Any(i => i.ID == prodSubstitute[count].id))
{
// perform something here
}
答案 1 :(得分:0)
为了获得最佳性能,您可以在id键上加入两个列表并检查是否为空。
var q = from p in prodSubstitute
join d in distSPUItem on p.id equals d.id into g
from x in g.DefaultIfEmpty()
where x == null
select p;
foreach(var item in q)
{
//Perform something here
}
答案 2 :(得分:0)
试试这个,
List<ProductPacking> prodSubstitute = new List<ProductPacking>();
List<DistributionStandardPackingUnitItems> distSPUItem = newList<DistributionStandardPackingUnitItems>();
var q = prodSubstitute.Where(item => distSPUItem.Select(item2 => item2).Contains(item));
var y = prodSubstitute .Except(distSPUItem ); // y will have 2, since 2 are not included in list2
foreach (var i in q)
{
//Perform something here
}