Мне нужно найти наибольшую сумму из группы заказов, используя LINQ и XML - PullRequest
0 голосов
/ 02 ноября 2010

Я соединил две коллекции из XML-файла, содержащего информацию о заказах в ресторане и их номерах заказов, какие товары находятся в этих заказах и сколько стоит каждый товар. Мне нужно найти, какой заказ является самым дорогим, а какой - наименее дорогим, используя операции LINQ. Я дошел до того, что у меня есть объединенная коллекция, но я не уверен, как бы я суммировал каждый заказ в отдельности, а затем нашел бы, какая стоимость больше / меньше.

Вот что у меня есть для этой части:

private void Question3_Click(object sender, RoutedEventArgs e)
    {
        var menuItems = doc
            .Root
            .Element("menuItems")
            .Elements("menuItem")
            .Select(s => new
            {
                itemNr = s.Attribute("nr"),
                itemPrice = double.Parse(s.Attribute("price").Value, NumberStyles.Currency),
                name = s.Value
            });

        var orders = doc
            .Root
            .Element("orders")
            .Elements("order")
            .Select(r => new
            {
                itemNr = r.Attribute("nr")
            });

        var joinedList = menuItems
            .Join(orders,
            menuItem => menuItem.itemNr,
            order => order.itemNr,
            (menuItem, order) => new
            {
                orderNr = order.itemNr,
                itemNr = menuItem.itemNr,
                itemPrice = menuItem.itemPrice
            });

            //.Sum(order => order.itemPrice);

        AnswerBox.Text = joinedList.ToString();
    }

РЕДАКТИРОВАТЬ: Это то, что у меня сейчас, и я получаю "Последовательность не содержит элементов"

private void Question3_Click(object sender, RoutedEventArgs e)
    {
        var menuItems = doc
            .Root
            .Element("menuItems")
            .Elements("menuItem")
            .Select(s => new
            {
                itemNr = s.Attribute("nr"),
                itemPrice = double.Parse(s.Attribute("price").Value, NumberStyles.Currency),
                name = s.Value
            });

        var orders = doc
            .Root
            .Element("orders")
            .Elements("order")
            .Select(r => new
            {
                orderNr = r.Attribute("nr")
            });

        var joinedList = menuItems
            .Join(orders,
            menuItem => menuItem.itemNr,
            order => order.orderNr,
            (menuItem, order) => new
            {
                orderNr = order.orderNr,
                itemNr = menuItem.itemNr,
                itemPrice = menuItem.itemPrice
            }).GroupBy(order => order.itemNr)
            .Select(g => new
                {
                    orderNr = g.Key,
                    Sum = g.Sum(list => list.itemPrice)
                })
                    .Max(g => g.Sum);

        //var least = joinedList.Min(list => list.itemPrice);

        AnswerBox.Text = joinedList.ToString();
    }

XML: B.L.T. Чизбургер с беконом Пахлава Шеф-повар салат Куриное филе Стейк из курицы Куриный Кабоб Чили бургер Собака чили Холодная индейка Кукурузная собака Ужин салат Чизбургер с двойным беконом Двойной бургер Двойной чизбургер Двойной королевский бургер Филе рыбы Греческий салат Жареный сыр Жареная ветчина и сыр гироскоп Гироскопический ужин (салат и картофель фри) Хот-дог Сыр Бекон Юниор Младший бургер Младший чизбургер Юниор Роял (Пастрами) Кексы Грибной бургер Кольца лука Пастрами Мельт Пэтти Мэлт Четверть Бургер Четверть Бургер с сыром Королевский бургер (пастрами) Задушенный чили чизбургер Стейк фри Тунец Мельт Салат из тунца Сэндвич с тунцом

1 Ответ

0 голосов
/ 02 ноября 2010

Этот код помогает?

var grouping = from list in joinedList
           group list by list.orderNr into g
           select new { OrderNr = g.Key, Sum = g.Sum(list => list.itemPrice) };
var most = grouping.Max(g => g.Sum);
var least = grouping.Min(g => g.Sum);



РЕДАКТИРОВАТЬ (объяснение) Вы сначала группируете свой список по OrderNr. Таким образом, у вас будет список orderNumbers (g.key) и общая стоимость заказа.

OrderNr | Sum
--------------
123     | 20
345     | 48
222     | 50 

большинство вернет OrderNr = 222, сумма = 50

минимум вернет OrderNr = 123, Sum = 20

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