У меня есть простое представление, определенное MSSQL 2008. Представление определено следующим образом:
SELECT dbo.tblCompany.CompanyID, dbo.tblAccount.Carrier, SUM(ISNULL(dbo.tblLine.LineCharge, 0)) + SUM(ISNULL(dbo.tblLine.FeatureCharge, 0))
+ SUM(ISNULL(dbo.tblLine.AccessCharge, 0)) AS SumOfCharges
FROM dbo.tblCompany LEFT OUTER JOIN
dbo.tblCompany_Location LEFT OUTER JOIN
dbo.tblAccount LEFT OUTER JOIN
dbo.tblLine LEFT OUTER JOIN
dbo.tblBill_Data ON dbo.tblLine.LineID = dbo.tblBill_Data.LineID ON dbo.tblAccount.AccountID = dbo.tblLine.AccountID ON
dbo.tblCompany_Location.LocationID = dbo.tblAccount.LocationID ON dbo.tblCompany.CompanyID = dbo.tblCompany_Location.CompanyID
GROUP BY dbo.tblCompany.CompanyID, dbo.tblAccount.Carrier
, который возвращает данные в виде:
1 Carrier1 $70.00
1 Carrier2 $100.00
1 Carrier3 $150.00
3 Carrier2 $60.00
....etc
Это прекрасно работает с оператором выбора SQL.
У меня есть запрос VB linq, который просто устанавливает предложение where на основе CompanyID.
Dim expenses = From exp In Me.vw_CarrierExpenses _
Where exp.CompanyID = companyId _
Select exp
Return expenses.ToList()
Если я отфильтрую на основе CompanyID, равного 1, используя приведенные выше примеры данных, я получу первую строку 3 раза:
1 Carrier1 $70.00
1 Carrier1 $70.00
1 Carrier1 $70.00
Я, должно быть, здесь упускаю что-то очень простое. Он всегда возвращает правильное количество строк, но данные всегда идентичны. Спасибо.