Проблема запроса LightSwitch Linq To Entities! - PullRequest
1 голос
/ 24 июля 2011

Я очень новичок в Linq и Entities Framework.Я пытаюсь создать службу WCF RIA в создаваемом приложении LightSwitch Orders Management.Я уже создал 7 или 8 запросов, используя Linq (с большим количеством головных болей), но мне это удалось.Теперь мне нужно создать запрос, который получает TotalSales и TotalExpenses по месяцам, используя три таблицы:

DetailsVentes (SaleDetails), состоящий из: DateOfOrder, Количество, UnitPrice, Всего .... и т. Д. DetailsAchat (PurchaseDetails), состоящий изте же поля Сборы (расходы), состоящие из: DateOfExpense, ExpenseType, Cost .... и т. д.

Теперь я хочу получить запрос, который находит чистый доход в месяц (доход = TotalSales-TotalPurchases-TotalExpenses)

Я пробовал этот запрос

      Return From od In Me.Context.DetailsVentes
                From od2 In Me.Context.DetailsAchats
                   From od3 In Me.Context.Charges
              Group By Month = od.Vente.DateCommande.Month, Year = od.Vente.DateCommande.Year
              Into g = Group
              Select New TCR With {.Month = Month, .Year = Year, 
.MonthYearString = Month & "/" & Year, 
.TotalVentes = g.Sum(Function(s) (s.od.PrixUnitaire * s.od.Quantité)), 
.TotalAchats = g.Sum(Function(s) (s.od2.PrixAchat * s.od2.Quantité)), 
.TotalCharges = g.Sum(Function(s) (s.od3.Cout))}

Где Vente - это Продажа (Заказ), а DetailVentes - это OrderDetails Achat - это Покупка, а DetailAchat PurchaseDetail - это Расход.

Проблемаэто я получил странные результаты.Все значения (TotalVentes, TotalAchats, TotalCharges) умножаются на 13!

Например, если у меня есть 10 000 долларов США TotalSales за июнь 2011 года, этот запрос возвращает 130 000 долларов США!

Я действительнозастрял 4 дня, пытаясь получить правильный запрос.

Я повторяю, я новичок в Linq: p

Большое спасибо.

Редактировать: я попробовал совет @Jason, я сделал это:

Return From c In Me.Context.Charges
                         Join v In Me.Context.DetailsVentes On c.DateCharge.Month Equals v.Vente.DateCommande.Month And c.DateCharge.Year Equals v.Vente.DateCommande.Year
                 Join a In Me.Context.DetailsAchats On c.DateCharge.Month Equals a.Achat.DateCommande.Month And c.DateCharge.Year Equals a.Achat.DateCommande.Year
 Group By month = c.DateCharge.Month, Year = c.DateCharge.Year
                 Into g = Group
Select New TCR With {.Month = month, .Year = Year, .MonthYearString = "", .TotalAchats = g.Sum(Function(c) (c.a.Quantité * c.a.PrixAchat)), .TotalCharges = 45000, .TotalVentes = 250000, .TCRSingle = 0}

И результаты все еще очень странные (очень высокие)!Любой пример, которым я могу следовать ??

Спасибо.

Ответы [ 2 ]

1 голос
/ 25 июля 2011

Наконец-то у меня все получилось, разделив запрос на 3 запроса:

Dim vt = From od In Me.Context.DetailsVentes
     Group By Month = od.Vente.DateCommande.Month, Year = od.Vente.DateCommande.Year
     Into g = Group
     Select New VentesParMois With {.Month = Month, .Year = Year,
                                   .TotalVentesSingle = g.Sum(Function(od) _
                                       (od.PrixUnitaire * od.Quantité))}



Dim at = From od In Me.Context.DetailsAchats
      Group By Month = od.Achat.DateCommande.Month, Year = od.Achat.DateCommande.Year
      Into g = Group
      Select New AchatsParMois With {.Month = Month, .Year = Year, 
                                    .TotalAchatsSingle = g.Sum(Function(od) _
                                        (od.PrixAchat * od.Quantité))}


Dim ct = From od In Me.Context.Charges
     Group By Month = od.DateCharge.Month, Year = od.DateCharge.Year
     Into g = Group
     Select New ChargesParMois With {.Month = Month, .Year = Year, 
                                   .TotalChargesSingle = g.Sum(Function(od) _
                                       (od.Montant))}



Dim q = From a In at.AsEnumerable, v In vt.AsEnumerable, c In ct.AsEnumerable
        Where a.MonthYear = v.MonthYear AndAlso a.MonthYear = c.MonthYear
                Select New TCR With {.Month = a.Month, .Year = a.Year, .TotalAchats = a.TotalAchats, .TotalVentes = v.TotalVentes, .TotalCharges = c.TotalCharges}


Return q.AsQueryable

Большое спасибо, Джейсон.

0 голосов
/ 24 июля 2011

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

...