2014-06-18 18 views
0

我想知道是否有做到這一點使用LINQ或一些其他的方式更簡單的方法...C#組結果到另一個目錄<T2>與選定的領域

我想提取,從列表中,所有行,按特定字段對它們進行分組,並將結果存儲在另一個不同的列表中,如包含搜索參數的分組的非重複結果的列表。

下面是一個例子:

public class CustomObj 
{ 
    public int DOC { get; set; } 
    public string Desc { get; set; } 
    public string Name{ get; set; } 
} 

public class Worker() 
{ 
    public void DoWork() 
    { 
     List<CustomObj> objs = new List<CustomObj>(); 
     objs.Add(new CustomObj(1, "Type1", "Name1")); 
     objs.Add(new CustomObj(1, "Type2", "Name1")); 
     objs.Add(new CustomObj(2, "Type2", "Name2")); 
     objs.Add(new CustomObj(3, "Type1", "Name1")); 
     objs.Add(new CustomObj(3, "Type2", "Name1")); 
     objs.Add(new CustomObj(3, "Type3", "Name1")); 

     // HERE'S WHAT I'D LIKE TO DO 
     // NOTE THAT THIS IS NOT A CORRECT FORMATED FUNCTION 
     List<int> docs = objs.GroupBy(o => o.DOC).Select(o => o.DOC).ToList<int>(); 
    } 
} 

在結束我的文檔列表看起來應該像這樣

docs[0] = 1 
docs[1] = 2 
docs[2] = 3 

在我目前的項目我有,到目前爲止,10個不同的對象,我將不得不這樣做給所有人。當然,我希望避免爲每一個寫入廣泛的功能。

所以如果沒有其他方式,至少我想知道。

感謝

回答

5

什麼:

List<int> docs = objs.Select(o => o.DOC).Distinct().ToList(); 
+0

跑了幾個測試,似乎很好地工作。只需添加OrderBy即可獲得有序的結果。謝謝你,你爲我節省了很多工作! – David

1

或者,如果你想使用的GroupBy:

var docs = objs.GroupBy(o => o.DOC).Select(o => o.Key).ToList(); 
+0

它似乎和Janiels的答案一樣有效...但是自從我測試了他的第一個,我接受了那個......對不起,但是非常感謝答案。很高興知道有多種方法可以實現相同的結果! – David

+0

沒有問題,謝謝你的迴應! – devduder

相關問題