как сделать группировку в LINQ - PullRequest
0 голосов
/ 03 ноября 2010

Я пытаюсь выполнить запрос LINQ к списку объектов RelatedProducts.Я должен сгруппировать их по CategoryId, поэтому я использую предложение group by.К сожалению, я только что понял, что не могу просто использовать «select g.Value» в конце.Группа является IGrouping, и я хочу вернуть здесь только соответствующий продукт.Как я могу это сделать?

Также в моем случае продукт может быть в 2 категориях одновременно, так как я могу предотвратить 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 голосов
/ 03 ноября 2010

Мне удалось сделать это так:

List<RelatedProduct> relatedProducts = new List<RelatedProduct>();
        foreach (var group in query)
        {
            var key = group.Key;
            relatedProducts.AddRange(group.ToList());
        }
0 голосов
/ 03 ноября 2010

В вашем случае g равно IEnumerable, поэтому вы можете просто использовать select g.First() или применить к нему любую дополнительную фильтрацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...