2012-12-28 87 views
0

我試圖拉出一組在一組數據中出現多次的記錄。我的問題在於,我的查詢沒有考慮到最初查詢中的分組,並且基本上是拉取所有記錄。我有從數據表中提取數據的初始查詢,如下所示:LINQ查詢沒有正確分組

Dim eDTKBase = From eDTKData In dteDTK _ 
Select New With _ 
{ _ 
.eDTK_PDP_Code = eDTKData.Field(Of String)("PDP_CODE"), _` 
.eDTK_PDP_Description = eDTKData.Field(Of String)("PDP_DESCRIPTION"), _ 
.eDTK_WB_Slave = eDTKData.Field(Of String)("WALLBOARD_OR_SLAVE"), _ 
.eDTK_Print_On_DAD = eDTKData.Field(Of String)("PRINT_ON_DAD"), _ 
.eDTK_PLI = eDTKData.Field(Of String)("COMPASS_PLI"), _ 
.eDTK_Dead = eDTKData.Field(Of String)("DEAD"), _ 
.eDTK_Instance = eDTKData.Field(Of String)("COUNTRY_INSTANCE") _ 
} 

我然後嘗試篩選只記錄其中eDTK_PDP_Code字段的計數>只能用於由eDTK_PLI,eDTK_PDP_Code分組的記錄1使用下面的LINQ查詢字段:

Dim EDTKMultPDPtoPLI = From EDTK In eDTKBase _ 
Group By EDTK.eDTK_PLI, _ 
EDTK.eDTK_PDP_Code _ 
Into g = Group _ 
Where eDTK_PDP_Code.Count > 1 _ 
Select eDTK_PLI, _ 
eDTK_PDP_Code, _ 
eDTK_PDP_Code.Count 

的問題是它是從數據表,而不是僅僅在分組的記錄評估整個數據集的。我在這裏做錯了什麼?謝謝。

+0

你是什麼意思評價?在小組賽階段之前,您似乎沒有進行過濾**,因此您必須通過整個數據庫來確定哪些組有多條記錄。 – sgmoore

+0

我注意到另一個例子,它使用g進行過濾。那麼,eDTK_PDP_Code.Count> 1會工作嗎?我正在嘗試使用一個示例來獲取我的LinqPad設置,因此我將嘗試更詳細地查看該問題。 – Wade73

+0

這是LINQ到SQL? –

回答

1

我做了一些嘗試,我想我找到了解決方案。這裏是使用AdventureWorks的代碼,但我認爲它應該是有道理的。

from r in (
    from s in SalesOrderHeaders 
    select s.SalesPersonID,s.CustomerID 
    where SalesPersonID isnot nothing) 
group r by key = new with {r.SalesPersonID,r.CustomerID} into group 
where group.count > 1 
select key.SalesPersonID, key.CustomerID, group.count() 

有了這個結果,顯示了客戶與給定銷售人員訂購的次數。

RepID CustID Count 
280  1  4 
283  2  8 
275  3  6 
277  3  6 
275  4  6 
277  4  2 
281  5  8 

裁剪其餘

希望這有助於

韋德