Pau*_* W. 5 c# linq linq-to-objects
如果您有一个List并且想要为具有相同Id字段的任何SomeObject合并子List,您将如何做到这一点?以下是示例对象:
public class SomeObject
{
public string Name { get; set; }
public int Id { get; set; }
public List<KeyPair> ValuePairs {get;set;}
}
public class KeyPair
{
public string Key { get; set; }
public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是模拟列表的示例创建:
List<SomeObject> objects = new List<SomeObject>();
objects = new List<SomeObject>()
{
new SomeObject
{
Name="Rando Object 1",
Id=5,
ValuePairs=new List<KeyPair>()
{
new KeyPair
{
Key="TestKey1",
Value="TestValue1"
},
new KeyPair
{
Key="TestKey2",
Value="TestValue2"
}
}
},
new SomeObject
{
Name="Rando Object 2",
Id=5,
ValuePairs=new List<KeyPair>()
{
new KeyPair
{
Key="TestKey3",
Value="TestValue3"
},
new KeyPair
{
Key="TestKey4",
Value="TestValue4"
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
您需要做什么样的Linq或相关查询才能创建基于具有匹配Id字段的任何顶级SomeObject合并的SomeObject的新列表; 然后将他们的KeyPair列表组合到一个列表中.因此,您将使SomeObject Id = 5,然后从列表中的两个不同的先前SomeObject合并4个键对值.可以从新对象中省略名称值.
有任何想法吗?非常感谢.
您需要将它们分组Id并用于SelectMany选择KeyPair列表.
var result = objects.GroupBy(o => o.Id).Select(group => new SomeObject
{
Id = group.Key,
ValuePairs = group.SelectMany(x => x.ValuePairs).ToList()
}).ToList();
Run Code Online (Sandbox Code Playgroud)