c#从List转到另一个列表<与选定的字段

本文关键字:列表 另一个 字段 List | 更新日期: 2023-09-27 18:09:05

我想知道是否有一个更简单的方法来做到这一点使用LINQ或其他方式…

我想从List中提取所有行,按特定字段对它们进行分组,并将结果存储在另一个不同的列表中,例如包含分组的,不重复的搜索参数结果的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 List应该是这样的

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

在我当前的项目中,到目前为止,我有10个不同的对象,我将不得不对它们全部执行此操作。当然,我希望避免为每一个都编写扩展的函数。

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

谢谢

c#从List<T>转到另一个列表<与选定的字段

怎么样:

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

或者,如果您想使用GroupBy:

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