如何在LINQ中进行分组

时间:2010-11-03 11:20:02

标签: c# linq linq-to-sql c#-4.0

我正在尝试对RelatedProducts对象列表执行LINQ查询。我必须按CategoryId对它们进行分组,所以我使用group by子句。不幸的是,我刚才意识到我不能简单地在最后使用'select g.Value'。该组是一个IGrouping,我想在这里只返回RelatedProduct。我怎么能这样做?

同样在我的情况下,产品可以同时分为两类,那么如何防止LINQ返回重复项呢?我只对第一类感兴趣(实际上只要分配给该产品就没关系。)

var query = from rp in context.RelatedProducts
                    join p in context.Products on rp.ProductId2 equals p.ProductId
                    join pc in context.ProductCategories on p.ProductId equals pc.ProductId
                    where rp.ProductId1 == productId1 &&
                    !p.Deleted &&
                    (showHidden || p.Published)
                    orderby rp.DisplayOrder
                    group rp by pc.CategoryId into g
                    select g;

2 个答案:

答案 0 :(得分:0)

在您的情况下,gIEnumerable,因此您只需使用select g.First()或对其应用任何类型的附加过滤。

答案 1 :(得分:-2)

我设法做到了这样:

List<RelatedProduct> relatedProducts = new List<RelatedProduct>();
        foreach (var group in query)
        {
            var key = group.Key;
            relatedProducts.AddRange(group.ToList());
        }