2010-09-02 95 views
1

我有一些代碼創建列表的列表。這份名單是這種類型的:將列表的列表投射到IGrouping?

List<List<Device>> GroupedDeviceList = new List<List<Device>>(); 

但需要在以下類型的返回結果:

IEnumerable<IGrouping<object, Device>> 

這是可能通過鑄造等,或我應該用我的名單不同的定義列表?

+0

什麼是你的分組的關鍵?設備的屬性? – 2010-09-02 08:49:43

回答

2

如果我理解正確的話你的意圖,答案是如下:

var result = GroupedDeviceList 
     .SelectMany(lst => lst.GroupBy(device => (object)lst)); 

結果是IEnumerable<IGrouping<object, Device>>類型,其中對象是對您的List<Device>的參考。

1

IGrouping<T1,T2>通常是通過LINQ GroupBy查詢創建的。

你是如何填充GroupedDeviceList?你是在手動做還是從.GroupBy的結果轉換它?

你可以進行做類似的事情再次分組:

// IEnumerable<IGrouping<TWhatever, Device>> 
var reGroupedList = 
    GroupedDeviceList 
    .SelectMany(innerList => innerList.GroupBy(device => device.Whatever)); 
+0

這將返回一個IEnumerable >>' – 2010-09-02 09:00:38

+0

@Thomas當然應該使用'SelectMany',答案更新。謝謝。 – 2010-09-02 09:10:46

1

。假定每一個非空列表的內容應組成一組...

IEnumerable<IGrouping<object, Device>> query = 
    from list in lists 
    from device in list 
    group device by (object)list;