查找对象列表中的公共元素

use*_*762 4 c# linq c#-4.0

我有以下代码

public class OrderDetails
{
    public int OrderId { get; set; }

    public int CustomerId { get; set; }

}

public List<int> GetCustomerIds()
{
    var orderDetails = new List<OrderDetails>
    {
        new OrderDetails {OrderId = 1001, CustomerId = 2001},
        new OrderDetails {OrderId = 1001, CustomerId = 2002},

        new OrderDetails {OrderId = 1002, CustomerId = 2003},
        new OrderDetails {OrderId = 1002, CustomerId = 2002},

        new OrderDetails {OrderId = 1003, CustomerId = 2003},
        new OrderDetails {OrderId = 1003, CustomerId = 2002},     
        //return list of common customerIds.           
    };
} 
Run Code Online (Sandbox Code Playgroud)

我想得到一份CustomerIds在所有订单中都很常见的清单.在上面的例子中,我的输出将是2002.实现这一目标的干净方法是什么?

Jer*_*vel 6

这将完成你想要的:

var result = orders.GroupBy(x => x.CustomerId)
                   .Where(y => y.Count() == orderDetails.GroupBy(z => z.OrderId)
                                                        .Count())
                   .FirstOrDefault()
                   .Key;
Run Code Online (Sandbox Code Playgroud)

输出:

2002年

我们可以用英语查询目的:

  • 将您的收藏分组 CustomerId
  • 通过分组OrderId和获取,收集有多少不同的订单Count()
  • 将集合过滤到那些经常出现订单的客户
  • 选择第一个
  • 打印钥匙(即CustomerId)

重要提示:这只会占用第一位客户,以防有多个具有相同数量的订单,但更改此选项以获取所有订单都是微不足道的.