0

我有一个List<ReportObject>并且希望能够基于与列表中第二个元素的某些其他属性匹配的一个元素的某些属性的相等性将列表的某些元素组合成一个元素。在这种情况下,我想用第二个元素的值更新第一个元素,然后返回一个仅包含“第一个元素”集合的列表。

也许 GroupBy(或一般的 LINQ)在这里不是正确的解决方案,但它看起来确实比执行传统foreach循环和更新第二个列表要干净得多。我想要的是这样的:

List<ReportObject> theList = new List<ReportObject>() 
                          { new ReportObject() { Property1 = "1", Property2 = "2" },
                            new ReportObject() { Property1 = "2", Property2 = "3" }
                            new ReportObject() { Property1 = "1", Property2 = "3" } };

List<ReportObject> newList = new List<ReportObject>();
for(int i = 0; i < theList.Count; i++)
{
    for(int j = i + 1; i < theList.Count; j++)
    {
       if (theList[i].Property1 == theList[j].Property2)
       {
           theList[i].Property2 = theList[j].Property2);
           newList.Add(theList[i]);

           theList.RemoveAt(j);
       }
    }
}

return newList;
4

3 回答 3

1
var newList = theList.GroupBy(x => x.Property1).Select(g => g.First()).ToList();
于 2013-08-23T18:32:49.087 回答
0

From your code, it's obviously that the newList will contain all items which have Property1 = Property2:

var newList = theList.SelectMany((x,i)=>
                                 theList.Where((y,j)=>j>i && y.Propery2 == x.Propery1)
                                        .Select(a=> new ReportObject{
                                                      Property1=x.Property1,
                                                      Property2=x.Property1
                                                      });
于 2013-08-23T18:50:08.723 回答
0

我认为类似的东西theList.GroupBy(x => x.Property1, x => x.Property2);会做你想做的事。

于 2013-08-23T18:32:31.693 回答