Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2012, 18:35   #1
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию C #: как это будет на LINQ?

У меня такая проблема -надо написать запрос на LINQ, но я не очень хорошо понимаю, как я могу сделать select для нескольких данных и не могу посчитать итоги продаж по конкретной категории напитков - когда я считаю продажи через Count, компилятор требует переменную логического типа, а мне надо посчитать число порций - ведь в SQL агрегатная функция Сount считает именно int

Вот наброски
Код:
Drinks [] drink = new Drinks[3];

Drink (DrinkName, Price)//конструктор для напитков

drink[0]= new Drink (Fanta, 5.00m),// напитки
drink[1]= new Drink (Tee, 3.00m),
drink[2]= new Drink (Red Vine, 7.00m)

sales = new DrinkSale[10];//здесь дата и проданный напиток

///Продажи

public static void SalesData(DateTime data)
      {

var queryDaySale = from DrinkSale in sales
	where DrinkSale.DataofSale == data
	select DrinkSale.Count(s=>s.DrinkName)// говорит, что нужен булеан

//Как вывести не только количество проданных напитков по категориям
// но и сумму продаж конкректой категории  (на какую сумму были проданы лимонат, чай, вино) 
(select DrinkSale.Sum(s=>s.Price))
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 21.04.2012, 19:47   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
select DrinkSale.Count(s=>s.DrinkName)// говорит, что нужен булеан
Так там по-моему группировать нужно. Это же агрегатная функция.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.04.2012, 20:02   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Blondy

Во-первых, успокойся, отдышись, и попробуй-таки внятно объяснить, что же именно тебе нужно - из этого потока сознания ничего не понятно...
Rififi вне форума Ответить с цитированием
Старый 21.04.2012, 21:39   #4
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Нужен запрос, который выведет данные продаж напитков каждой группы и количество проданных порций за конкретное число
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 22.04.2012, 00:48   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Думаю нашей блондиночке нужно вот такое:
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Drinks { 
       public string name;
       public float price;
       public DateTime dt;
       public Drinks(string aname, float aprice, DateTime d) { name = aname; price = aprice; dt = d; }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            // Массив пойла
            Drinks [] drink = new Drinks[11];

            // Данные о продаже - Наименование, колво пляшек, продано за вчера...
            drink[0]= new Drinks("Fanta",2,         new DateTime(2012,01,01));
            drink[1] = new Drinks("Tee", 3,         new DateTime(2012, 01, 01));
            drink[2] = new Drinks("Red Vine", 750,  new DateTime(2012, 01, 01));
            drink[3] = new Drinks("Tee", 4,         new DateTime(2012, 01, 01));
            drink[4] = new Drinks("Fanta", 4,       new DateTime(2012, 01, 01));
            drink[5] = new Drinks("Tee", 4,         new DateTime(2012, 01, 01));
            drink[6] = new Drinks("Tee", 4,         new DateTime(2012, 01, 01));

            // И продано сегодня
            drink[7] = new Drinks("Red Vine", 56,   new DateTime(2012, 01, 02));
            drink[8] = new Drinks("Tee", 4,         new DateTime(2012, 01, 02));
            drink[9] = new Drinks("Tee", 4,         new DateTime(2012, 01, 02));
            drink[10] = new Drinks("Red Vine", 12,  new DateTime(2012, 01, 02));

            // Хотим узнать сколько пляшечек продано вчера за 1-е число
            var queryDaySale = from drinka in drink
                               where drinka.dt.Day==01 
                               group drinka by new { n = drinka.name};
            
            // Выводим данные, сгрупированные по названию
            foreach (var q in queryDaySale) { 
                    Console.WriteLine("{0},{1}", q.Key.n, q.Count()); 
            }
            Console.ReadKey();

        }
    }
}
Угадал?

P.S. Подредактил код, убрал мусор...
I'm learning to live...

Последний раз редактировалось Stilet; 22.04.2012 в 15:13.
Stilet вне форума Ответить с цитированием
Старый 22.04.2012, 14:14   #6
Blondy
Участник клуба
 
Аватар для Blondy
 
Регистрация: 07.07.2009
Сообщений: 1,385
По умолчанию

Да, Виталик, именно это мне и надо. Просто меня смущает q.Key: является ли необходимостью прописывать для него интерфэйс IGrouping- ведь это фактически ключевое поле?

Я просто не могла так прописать вручную массив продаж, он у меня генерируемый случайным образом - там проданных напитков многа))))И меня смущал множественный выбор полей - как грамотно вывести их, до этого я видела select только на одно поле и вывод инфо лишь одного параметра, и то все через List.

Сейчас тестировать буду.
"Все мы жаждем чудес. Чисто человеческое свойство." Carl Sagan
Blondy вне форума Ответить с цитированием
Старый 22.04.2012, 15:12   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
является ли необходимостью прописывать для него интерфэйс IGrouping- ведь это фактически ключевое поле?
var все сгладит.
Цитата:
он у меня генерируемый случайным образом - там проданных напитков многа)
Не важно.
Цитата:
как грамотно вывести их
Ну вот если я правильно понял МСДН - создается анонимный обьект, в который помещаются нужные поля: group drinka by new { n = drinka.name};
Их может быть несколько, и Key будет ссылаться на них.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
На чем это будет сделать попроще? Namolem Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 22.11.2011 14:47
Будет ли это плагиатом??? alexplato Свободное общение 7 19.01.2011 15:55
Как это на C# будет Jekon Помощь студентам 0 23.12.2010 00:05
как это будет выглядеть в Delphi? Федеор Свободное общение 1 14.11.2010 23:23
как это будет на Дельфи? Mereke Помощь студентам 2 22.05.2010 15:11