Как сделать несколько Group By в linq to sql? - PullRequest
0 голосов
/ 29 августа 2009

как вы можете сделать несколько "групп по" в linq to sql?

Не могли бы вы показать мне как синтаксис запроса linq, так и синтаксис метода linq.

Спасибо

Редактировать.

Я говорю о нескольких параметрах, скажем, группировка по «полу» и «возрасту».

Также я забыл упомянуть, как бы я сказал сложить все возрасты, прежде чем сгруппировать их.

Если бы у меня был этот пример, как бы я это сделал

Таблица продукции

PRODUCTID Наименование товара ProductQty ProductPrice

А теперь представьте, по какой-то причине у меня были тонны строк с одинаковыми ProductName, разными ProductQty и ProductPrice.

Как бы я подобрал его по названию продукта и сложил вместе ProductQty и ProductPrice?

Я знаю, что в этом примере, вероятно, не имеет смысла, почему бы строка за строкой с тем же именем продукта, но в моей базе данных это имеет смысл (это не продукты).

1 Ответ

5 голосов
/ 29 августа 2009

Чтобы сгруппировать по нескольким свойствам, вам нужно создать новый объект для группировки по:

var groupedResult = from person in db.People
                    group by new { person.Sex, person.Age } into personGroup
                    select new 
                    { 
                        personGroup.Key.Sex, 
                        personGroup.Key.Age, 
                        NumberInGroup = personGroup.Count() 
                    }

Извинения, я не видел вашего окончательного редактирования. Может быть, я неправильно понимаю, но если вы суммируете возраст, вы не сможете сгруппировать его. Вы можете группировать по полу, суммировать или усреднять возраст ... но вы не можете группировать по полу и суммированному возрасту одновременно в одном утверждении. Возможно, можно использовать вложенный запрос LINQ, чтобы получить суммарный или средний возраст для любого пола ... хотя и немного сложнее.

EDIT:

Чтобы решить вашу конкретную проблему, она должна быть довольно простой и понятной. Вы группируете только по имени, поэтому все остальное элементарно (пример обновлен с помощью сервиса и конкретного типа dto):

class ProductInventoryInfo
{
    public string Name { get; set; }
    public decimal Total { get; set; }
} 

class ProductService: IProductService
{

    public IList<ProductInventoryInfo> GetProductInventory()
    {
        // ...

        var groupedResult = from product in db.Products
                            group by product.ProductName into productGroup
                            select new ProductInventoryInfo
                            {
                                Name = productGroup.Key,
                                Total = productGroup.Sum(p => p.ProductCost * p.ProductQty)
                            }

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