GroupBy由许多不同的键组成

时间:2010-03-10 08:52:30

标签: c# linq

    var expr = Data.Customers
        .GroupBy(c => c.Country, c => c.Name);

    foreach (IGrouping<Countries, string> customerGroup in expr)
    {                
        Trace.WriteLine("Country: " + customerGroup.Key);
        foreach (var item in customerGroup)
        {
            Trace.WriteLine(item);
        }
        Trace.WriteLine("");
    }

我希望得到以下结果:

国家:意大利

保 马可

国家:美国

詹姆斯 的

而不是:

国家:意大利 保罗 马可

国家:美国 詹姆士 的弗兰克 弗兰克

如果可能,请使用标准LINQ语法进行。

3 个答案:

答案 0 :(得分:7)

如果您想按多个键分组,则必须使用匿名类型:

var expr = Data.Customers 
             .GroupBy(c =>new{c.Country, c.Name}); 

然后,您可以访问expr.Key.Countryexpr.Key.Name

答案 1 :(得分:0)

乍一看,我认为您不需要按名称分组

var expr = Data.Customers
        .GroupBy(c => c.Country);

答案 2 :(得分:0)

    var expr = Data.Customers
                    .Select(c => new { c.Country, c.Name})
                    .Distinct()
                    .GroupBy(c => c.Country, c => c.Name);

我发现了一个笨拙的解决方案,但没有使用LINQ语法。