将对象列表与int C#列表进行比较

时间:2017-12-12 21:35:02

标签: c#

我正在尝试创建一个get方法,它比较2个列表,一个int和一个对象。 Det方法应返回所有对象或ID,这不在其他列表中

 public List<ProductBO> GetAll()
    {
        using (var uow = facade.UnitOfWork)
        {
            return uow.ProductRepository.GetAll().Select(p => Pconv.Convert(p)).ToList();
        }
    }
    public List<ProductBO> GetFilteretProduct(List<int> ids)
    {


        var Product = GetAll();
        var FilteretProduct = Product.Where(p => !ids.Contains(p.IngredientIds));

        return FilteretProduct;

    }

当我测试代码时,它会返回所有内容吗?

2 个答案:

答案 0 :(得分:0)

你可以写一个扩展方法,虽然框架中可能已经存在这样做的事情。

public static class Extentions
{
    public static List<T> Filter<T>(this List<T> list, List<T> filterList)
    {
        return list.Where(v => !filterList.Contains(v)).ToList();
    }
}

并使用它:

var filteredList = list1.Filter(list2);

您可能需要更改Contains语句的详细信息以满足您的需求。

@NetMage发表评论后编辑:

public static class Extentions
{
    public static IEnumerable<T> NotIn<T>(this IEnumerable<T> list, IEnumerable<T> filterList)
    {
        return list.Where(v => !filterList.Contains(v));
    }
}

答案 1 :(得分:0)

我相信你想要的意图是:

var missing = example.Except(sample);

这将使用您可以根据自己的目的进行调整的IEquatable(About Except)

您还可以通过以下方式实现此目的:

var missing = example.Where(item => sample.Any(itm => item == itm));

这段代码将返回第二个集合中没有的任何项目。对于非常基本的Linq,授予上述内容并不像其他方法那样高效。但是你可以通过丰富的方法来实现这一目标。