LINQ сумма в итогах

150
11 марта 2018, 19:59

Здравствуйте!

UWP. Пытаюсь сделать группированный список с помощью CollectionViewSource. Надо сделать так, чтобы в группировках отображалась итоговая сумма по группировке. Помогите, пожалуйста, изменить запрос, чтобы в итоговых строках были итоговые суммы:

void Main()
{
    List<Store> storeList = new List<Store>();
    storeList.Add(new Store(){Name = "Склад", StoreType = "Type1", Quantity = 100});
    storeList.Add(new Store(){Name = "Склад 2", StoreType = "Type1", Quantity = 200});
    storeList.Add(new Store(){Name = "Склад 3", StoreType = "Type2", Quantity = 150});
   var result = from act in storeList group act by act.StoreType into grp orderby grp.Key select grp;
    foreach (var item in result)
    {
        Console.WriteLine($"{item.Key,-15}");
        foreach (var item2 in item)
        {
            Console.WriteLine($"{item.Key,25}");            
        }
    }
    // Keep the console window open in debug mode.
    Console.WriteLine("\nPress any key to exit");
}
public class Store
{
    public string Name { get; set; }
    public string StoreType { get; set; }
    public int Quantity { get; set; }
}

Вот примерно так надо бы:

Answer 1

Можно сделать что то подобное:

var categoryCounts =
    from s in storeList
    group s by s.StoreType into g
    select new { Category = g.Key, StoreCount = g.Sum(c=>c.Quantity), Items = g.ToList()};

То есть мы берем нашу коллекцию, в ней группируем по StoreType, затем формируем все в удобном для нас виде, где выводим имя группы, общую сумму, а также элементы, которые в нашей группе.

Повозился с выводом (в новинку для меня это позиционирование текста) и добился нужного результата:

foreach (var group in categoryCounts)
{
    Console.Write($"{group.Category,-15}");
    Console.Write($"{group.StoreCount,15}");
    foreach (var item in group.Items)
    {
        Console.WriteLine();
        Console.Write($"{item.StoreType,15}");
        Console.Write($"{item.Quantity,15}");
    }
    Console.WriteLine();
}

На выходе:

Type1                      300
          Type1            100
          Type1            200
Type2                      150
          Type2            150
Answer 2

Вот как теперь показывается:

Использую такой код для ресурсов:

<Page.Resources>
        <CollectionViewSource
        x:Name="AccountTypeOfCollection"
        Source="{x:Bind MyStoreList}"
        IsSourceGrouped="true"
        ItemsPath="MyStoreList.Items"/>

        <CollectionViewSource x:Name="cvsActivities" IsSourceGrouped="True"/>
        <local:ListGroupStyleSelector x:Key="listGroupStyleSelector"/>
    </Page.Resources>

Как исправить, чтобы показывались детальные записи по каждой группе?

READ ALSO
Заменить окончания слов (c#)

Заменить окончания слов (c#)

Пользователь вводит текстЕсли слово заканчивается на гласную, то заменить окончание на "program"(c #)

160
Конфликт скрипта с bootstrap.min.js

Конфликт скрипта с bootstrap.min.js

Есть конфликт приведенного внизу кода скрипта с частью кода из bootstrapmin

214
Как подключить Cookies к PopUP окну?

Как подключить Cookies к PopUP окну?

Подскажите, пожалуйста, как подключить куки к popup окну?

231