检查两个列表中的项目

时间:2014-01-27 08:11:04

标签: c# asp.net list

我在尝试检查两个列表中的重复时遇到了一些问题。我想要做的是检查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有无效的参数。任何指南?提前谢谢。

3 个答案:

答案 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
                }