【问题标题】:Filter list using lambda or anything easier使用 lambda 或任何更简单的方法过滤列表
【发布时间】:2015-03-17 17:05:57
【问题描述】:
var id = new List<int> {2, 4, 6, 8, 9, 3, 5};

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

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

【问题讨论】:

  • 您将过滤哪个字段?订单号?如果您以 foreach 的方式显示您的操作方式,我们可以帮助将其转换为 Linq。

标签: c# lambda


【解决方案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();

【讨论】:

    【解决方案2】:

    您可以使用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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2019-04-24
      • 1970-01-01
      • 2021-06-20
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多