Почему этот Linq Query возвращает 3 одинаковые строки из одного представления SQL? - PullRequest
0 голосов
/ 16 сентября 2010

У меня есть простое представление, определенное 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

Я, должно быть, здесь упускаю что-то очень простое. Он всегда возвращает правильное количество строк, но данные всегда идентичны. Спасибо.

1 Ответ

0 голосов
/ 16 сентября 2010

Я постоянно забываю, что в модели запросов LINQ должно быть действительно уникальное поле первичного ключа.Я добавил следующий «поддельный» первичный ключ к своему виду, добавив:

 ROW_NUMBER() OVER (ORDER BY dbo.tblCompany.CompanyID) As 'CarrierExpenseID'

к полям моего вида, а затем добавил его в качестве моего первичного ключа в мою модель вида.

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