C#将List <t>的结果分组到具有所选字段</t2> </t>的另一个List <t2>中

时间:2014-06-18 13:44:15

标签: c# wpf linq

我想知道是否有更简单的方法可以使用LINQ或其他方式来实现这一点...

我想从List中提取所有行,按特定字段对它们进行分组,并将结果存储在另一个不同的行中,例如包含搜索参数的分组但未重复的结果的列表。

以下是一个例子:

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个不同的对象,我将不得不对所有这些对象执行此操作。当然,我想避免为每个人编写大量的功能。

所以,如果没有别的办法,至少我想知道。

由于

2 个答案:

答案 0 :(得分:5)

怎么样:

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

答案 1 :(得分:1)

或者,如果您想使用GroupBy:

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