2010-09-16 39 views
0

我已經定義了MSSQL 2008年視圖的定義如下一個簡單的觀點:爲什麼這個Linq查詢從同一個SQL視圖返回3個相同的行?

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 SELECT語句。

我有一個基於CompanyID設置where子句的VB linq查詢。

Dim expenses = From exp In Me.vw_CarrierExpenses _ 
         Where exp.CompanyID = companyId _ 
         Select exp 

     Return expenses.ToList() 

如果我基於對1 CompanyID過濾,用上面的例子中的數據,我得到的第一個連續3次:

1 Carrier1   $70.00 
1 Carrier1   $70.00 
1 Carrier1   $70.00 

我必須失去了一些東西很簡單的在這裏。它總是返回正確數量的行,但數據總是相同的。謝謝。

回答

0

我一直忘記LINQ需要在查詢模型中有一個真正唯一的主鍵字段。我增加了以下「假」主鍵,把我的觀點加入:

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

我的視野,然後加入這是我在我的視圖模型的主鍵。

相關問題