2014-06-18 19 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

相关问题