我有这样的课:

public class Foo
{
  public string Regn{get;set;}

  public string DocName{get;set;}

  ...
}

在我的应用程序中,此类与 IEnumerable 一起使用:
IEnumerable<Foo> items;

如何获得新的 IEnumerable,对于具有相同 Regn 和 DocName 属性的所有项目 DocName 设置如下(仅当具有相同 DocName >1 的对象时):
item.DocName=item.DocName+".1";//+"2",etc.

[更新]
输入样本:
Regn DocName
1    1
1    2
1    2
2    5
2    5
2    6

输出:
Regn DocName
1    1
1    2.1
1    2.2
2    5.1
2    5.2
2    6

最佳答案

如果您有 Foo 的默认构造函数,请尝试使用它:

var newItems = items.
            GroupBy(f => Tuple.Create(f.Regn, f.DocName)).
            SelectMany(gr => gr.Count()<=1 ? gr : gr.Select((f, i) => new Foo
            {
                Regn = f.Regn,
                DocName = f.DocName + "." + (i + 1)
            }));

关于c# - LINQ 中的 GroupBy 并设置属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7565169/

10-11 15:14