代码之家  ›  专栏  ›  技术社区  ›  mbursill

如何使用LINQ查找特定属性的副本?

  •  25
  • mbursill  · 技术社区  · 14 年前
    Customer customerOne = new Customer("John", "Doe");
    Customer customerTwo = new Customer("Super", "Man");
    Customer customerThree = new Customer("Crazy", "Guy");
    Customer customerFour = new Customer("Jane", "Doe");
    Customer customerFive = new Customer("Bat", "Man");
    
    List<Customer> customers = new List<Customer>();
    customers.Add(customerOne);
    customers.Add(customerTwo);
    customers.Add(customerThree);
    customers.Add(customerFour);
    customers.Add(customerFive);
    

    什么样的LINQ查询会为所有姓氏相同的客户返回一个可枚举的?

    结果应该包括一个实例:John Doe、Jane Doe、Super Man和Bat Man

    3 回复  |  直到 14 年前
        1
  •  14
  •   Mikael Eliasson    14 年前
        var result = from c in customers
                     join c2 in customers on c.LastName equals c2.LastName
                     where c != c2
                     select c;
    
        2
  •  35
  •   jeroenh    14 年前
     customers.GroupBy(c => c.LastName).Where(g => g.Skip(1).Any()).SelectMany(c => c)
    

    或者使用LINQ语法:

            var q = from c in customers
                    group c by c.LastName into g
                    where g.Skip(1).Any()
                    from c in g
                    select c;
    
        3
  •  7
  •   jason    14 年前
    var groups = customers.GroupBy(c => c.LastName).Where(g => g.Skip(1).Any());
    foreach(var group in groups) {
        Console.WriteLine(group.Key);
        foreach(var customer in group) {
            Console.WriteLine("\t" + customer.FirstName);
        }
    }
    

    输出:

    Doe
            John
            Jane
    Man
            Super
            Bat
    

    您可以使用

    var list = groups.SelectMany(g => g);