powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с LINQ запросом
11 сообщений из 11, страница 1 из 1
Помогите с LINQ запросом
    #38607147
Фотография Выcпрошайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется 3 таблицы: Клиенты, ТочкиОбслуживания и скажем ЖурналДоходов. Связи:Клиент-ТочкиОбслуживания (1 ко многим), ТочкиОбслуживвания-ЖурналДоходов (1 ко многим). Поля таблицы ЖурналДоходов:ТекущийГодТекущийМесяцДоходТочкиОбслуживания

Также есть таблица ДоходыКлиента связанная с таблицей Клиенты (многие к 1), где есть поле ИтоговыйДоход которое заполняется вычисляемым методом. Поля таблицы:ГодДоходаМесяцДоходаИтоговыйДоход
Если сформулировать запрос словами, то примерно так: Для каждого Клиента суммировать доход по всем его ТочкамОбслуживания, где ТекущийГод и ТекущийМесяц из таблицы ЖурналДоходов равен ГодуДохода и МесяцуДохода таблицы ДоходыКлиента.
Вот код который неправильно вычисляет сумму. Не знаю как правильно отфильтровать и где применить оператор Where.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
partial void RevenueCalculate_Execute()
        {
            // Вычисляем общую сумму дохода клиента за месяц по всем точкам обслуживания
            Customer cust = this.Customers.SelectedItem;
            var query = from servpoint in cust.ServicePointCustomers
                        select new
                        {
                            totalrevenue = servpoint.InkasControlCards.Sum(s => (decimal)s.RevenueServicePoint)
                        };

            foreach(var servpoint in query) 
            {              
               this.RevenueCustomers.SelectedItem.AmountRevenue = servpoint.totalrevenue;              
            }
        }


Разъясните что к чему, не очень силен в LINQ запросах.
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38607192
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
напишите sql запрос возвращающий требуемый результат и выложите сюда... возможно, в процессе написания, на Вас снизойдет божественное озарение... ну а если нет... поможем. Кроме того, если требуемого Вы сделать не в состоянии, то всегда есть вариант без линка реализовать то же самое... можно выложить и этот результат... (ну или последнее + решарпер :) )
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38607193
Фотография Выcпрошайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняюсь, Таблицы неправильно оформил.
ЖурналДоходов:ТекущийГодТекущийМесяцДоходТочкиОбслуживания
ДоходыКлиента:ГодДоходаМесяцДоходИтоговыйДоход
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38607325
Фотография Выcпрошайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserнапишите sql запрос возвращающий требуемый результат и выложите сюда... возможно, в процессе написания, на Вас снизойдет божественное озарение... ну а если нет... поможем. Кроме того, если требуемого Вы сделать не в состоянии, то всегда есть вариант без линка реализовать то же самое... можно выложить и этот результат... (ну или последнее + решарпер :) )
Попробую простой запрос выложить, как я его понимаю
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38607606
Фотография Выcпрошайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот простой SQL запрос сделал. Правильно-неправильно, не могу проверить. Вот как из него в LINQ запрос преобразовать?
Код: sql
1.
2.
3.
4.
5.
SELECT DISTINCT Customers.CustomerName,InkasControlCards.CurrentYearInkas,InkasControlCards,CurrentMonthInkas,
InkasControlCards.CurrentYearInkas,Sum(InkasControlCards.RevenueServicePoint) AS [TotalRevenue], RevenueCustomers.YearRevenue, RevenueCustomers.MonthRevenue
FROM (Customers INNER JOIN (ServicePointCustomers INNER JOIN InkasControlCards ON (ServicePointCustomers.ID=InkasControlCards.ID) AND (ServicePointCustomers.ID=InkasControlCards.ID)) ON Customers.ID=ServicePointCustomers.ID) INNER JOIN RevenueCustomers ON Customers.ID=RevenueClient.ID
WHERE InkasControlCards.CurrentYearInkas=RevenueCustomers.YearRevenue AND InkasControlCards,CurrentMonthInkas=RevenueCustomers.MonthRevenue
GROUPBYCustomers.CustomerName,ServicePointCustomers,InkasControlCards,CurrentMonthInkas,InkasControlCards.CurrentYearInkas RevenueCustomers.YearRevenue, RevenueCustomers.MonthRevenue;
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38607803
Фотография Выcпрошайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чуть переписал запрос
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Customer cust = this.Customers.SelectedItem;
            var query = from servpoint in cust.ServicePointCustomers
                        from card in servpoint.InkasControlCards
                        where card.CurrentMonthInkas==cust.RevenueCustomers.SingleOrDefault().MonthRevenue
                        select new
                        {
                            totalrevenue = servpoint.InkasControlCards.Sum(s => (decimal)s.RevenueServicePoint)
                        };

            foreach(var servpoint in query) 
                {
               this.RevenueCustomers.SelectedItem.AmountRevenue = servpoint.totalrevenue;
                }


Все равно сумму неправильную выдает.
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38607948
Фотография Выcпрошайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Записи в таблицах допустим такие:
Магазин №1
ГодМесяцДоход2013январь3000 руб2013февраль3000 руб

Магазин №2
ГодМесяцДоход2013январь550 руб

То есть, за январь должен получиться доход от двух магазинов в сумме 3550 руб. А у меня получается 6000 руб. Получается суммируются два месяца (январь, февраль) Магазина №1.
Как правильно запрос-то составить?
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38608200
Monochromatique
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВыcпрошайкаЗаписи в таблицах допустим такие:

Не допустим - а выкладывай сюда проект, с твоими объектами и их коллекциями.

В башке крутить твои магазы - думаю, мало у кого есть желание.

Выложишь проект - напишу запрос.
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38608227
Lelouch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Выcпрошайка,

а где у вас группировка или ограничение по месяцу то? ни в одном запросе не вижу
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38608391
Фотография Выcпрошайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LelouchВыcпрошайка,

а где у вас группировка или ограничение по месяцу то? ни в одном запросе не вижу
Вот так сделал.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// Вычисляем общую сумму дохода клиента за рабочий месяц по всем точкам обслуживания
            Customer cust = this.Customers.SelectedItem;
            var query = from servpoint in cust.ServicePointCustomers
                        from card in servpoint.InkasControlCards
                        where card.CurrentMonthInkas == cust.RevenueCustomers.SingleOrDefault().MonthRevenue
                        group card by card.CurrentMonthInkas into pointsales
                        select new
                        {
                          totalrevenue= pointsales.Sum(s => (decimal)s.RevenueServicePoint)
                        };
            foreach(var servpoint in query) 
                {
                    this.RevenueCustomers.SelectedItem.AmountRevenue =(decimal) servpoint.totalrevenue;
                }


Вроде бы теперь сумма правильная получилась.
...
Рейтинг: 0 / 0
Помогите с LINQ запросом
    #38608801
Фотография Выcпрошайка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВыcпрошайкаLelouchВыcпрошайка,

а где у вас группировка или ограничение по месяцу то? ни в одном запросе не вижу
Вот так сделал.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
// Вычисляем общую сумму дохода клиента за рабочий месяц по всем точкам обслуживания
            Customer cust = this.Customers.SelectedItem;
            var query = from servpoint in cust.ServicePointCustomers
                        from card in servpoint.InkasControlCards
                        where card.CurrentMonthInkas == cust.RevenueCustomers.SingleOrDefault().MonthRevenue
                        group card by card.CurrentMonthInkas into pointsales
                        select new
                        {
                          totalrevenue= pointsales.Sum(s => (decimal)s.RevenueServicePoint)
                        };
            foreach(var servpoint in query) 
                {
                    this.RevenueCustomers.SelectedItem.AmountRevenue =(decimal) servpoint.totalrevenue;
                }


Вроде бы теперь сумма правильная получилась.
Короче вот окончательный метод, который правильно вычисляет в запросе
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
partial void RevenueCalculate_Execute()
        {
            // Вычисляем общую сумму дохода клиента за рабочий месяц по всем точкам обслуживания
            Customer cust = this.Customers.SelectedItem;
            var query = from servpoint in cust.ServicePointCustomers
                        from card in servpoint.InkasControlCards
                        where card.CurrentMonthInkas == this.RevenueCustomers.SelectedItem.MonthRevenue
                        group card by card.CurrentMonthInkas into pointsales
                        select new
                        {
                          totalrevenue= pointsales.Sum(s => (decimal)s.RevenueServicePoint)
                        };
            foreach(var servpoint in query) 
                {
                  this.RevenueCustomers.SelectedItem.AmountRevenue =(decimal)servpoint.totalrevenue;
                }
        }
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Помогите с LINQ запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]