使用lambda或任何更简单的过滤列表

时间:2015-03-17 17:05:57

标签: c# lambda

var id = new List<int> {2, 4, 6, 8, 9, 3, 5};

var memberOrders = _orderRepository.GetMemberOrders(memberId).ToList();

现在我想使用list fore id过滤列表2而没有foreach或for循环。请帮助我。

2 个答案:

答案 0 :(得分:1)

听起来方法GetMemberOrders会返回指定memberId的所有订单。如果您要在id列表中过滤这些订单,则可以使用List.Contains()方法仅返回匹配的订单。

如果这个假设是正确的,您可以通过使用更有意义的名称来帮助减少混淆,例如:

var orderIdFilter = new List<int> {2, 4, 6, 8, 9, 3, 5};

var filteredMemberOrders = _orderRepository.GetMemberOrders(memberId)
    .Where(order => orderIdFilter.Contains(order.Id))
    .ToList();

答案 1 :(得分:0)

您可以使用Enumerable.Intersect extension Method方法,如下所示:

MSDN:

  

使用默认值生成两个序列的集合交集   等于比较来比较值。

        var id1 = new List<int> { 2, 4, 6, 8, 9, 3, 5 };
        var id2 = new List<int> { 2, 9, 7, 3, 15};
        var memberOrders = id1.Intersect(id2);

输出:2,9,3