2010-08-31 47 views
1

我正在將交易存儲在一個表中。這些事務具有與其層級樹中的父節點相關的ID。下圖顯示了我的樹的一個例​​子。我需要允許最終用戶檢索交易並將他們分組,然而他們隨後將其寫入基於分組的文件。在下面的圖片中(IM001-1等)創建交易。在現場版本中,樹會大得多,並且可能會爲城鎮和較小區域等提供更多級別。現在解決問題。比方說,用戶需要來自「英國」設備的所有交易,並且他們希望他們按國家/地區節點進行分組(如「UK_North」和「UK_South」)。結果應該是一個分組列表,在這個例子中將包含兩個項目。第一項將包含設備「IM001-1」和「IM001-2」的所有交易,第二項將包含設備「IM002-1」和「IM002-2」的交易。到目前爲止,我所做的是獲取每個父節點的設備列表。所以我有一個分組列表,其中每個項目包含所有子設備的ID。我想要做的就是使用Linq來查看我的所有事務與他們的ID,並創建一個分組列表,在分組檢查中查看哪個父母擁有它。這聽起來相當複雜,如果不清楚,我可以根據需要提供更多細節。我以正確的方式處理這個問題嗎?由於可能會有很多事務,我不希望爲每個事務做很多樹導航,因爲性能受到影響。基於其他羣體的Linq分組

alt text

的交易是在交易清單舉行:

List<Transaction> transactions 

有上暴露其「DEVICEID」每一筆交易的屬性

然後我有一個分組列表,它當我將鼠標懸停在「var」上時,將其定義爲以下內容:

IEnumerable<IGrouping<String,Device>> 

該列表被稱爲「分組設備」。列表中的每個項目表示父節點(例如UK_North),其中包含該節點下所有可用設備的列表。每個設備都有一個「DeviceId」屬性。

Linq語句需要做的事情是查看事務列表,並通過使用「groupedDevices」列表並根據它進行分組來查看它屬於哪個父類。

回答

1

不知道你有課,這是很難寫的實際查詢,但這樣的事情應該工作:

from country in countries 
from device in country.Devices 
from transaction in device.Transactions 
group transaction by country 

或者:

from country in countries 
select new 
{ 
    Country = country, 
    Transactions = from device in country.Devices 
       from transaction in device.Transactions 
       select transaction 
} 

編輯:

對於您提供的結構,您可以使用以下查詢:

from g in groupedDevices 
from device in g 
from transaction in transactions 
where transaction.DeviceId == device.Id 
group transaction by g 
+0

我試過你的代碼示例,但沒有多少運氣。我在原始問題中添加了更多細節,包括類名。有了這個附加信息,你認爲你的代碼應該還能工作嗎? – Retrocoder 2010-08-31 14:31:53

+0

這工作正常。非常感謝。 – Retrocoder 2010-09-01 08:25:48