由于某种原因,某些记录具有相同的ID。目标是列出具有相同ID的所有整个记录。例如,如何使用LINQ通过GroupId对以下记录进行分组,并查找具有相同ID的所有记录并将它们全部列出? (从而将每个组中的所有行合并为一个)
var list = new List<Record>()
{
new Record() { GroupId = 0, ValueA = 20, ValueB = 300 },
new Record() { GroupId = 1, ValueA = 30, ValueB = 700 },
new Record() { GroupId = 1, ValueA = 40, ValueB = 500 },
new Record() { GroupId = 2, ValueA = 80, ValueB = 300 },
new Record() { GroupId = 2, ValueA = 20, ValueB = 200 },
new Record() { GroupId = 2, ValueA = 20, ValueB = 200 }
};
期望结果是最后5条记录。
答案 0 :(得分:2)
回答“如何使用LINQ将GroupId分组以下记录”
var groupList = list.GroupBy((mRecord) => mRecord.GroupId).ToList();
答案 1 :(得分:2)
另一种方式是:
var results = (from l in list
group new {l.ValueA, l.ValueB} by l.GroupId
into g
select new {GroupId = g.Key, Values = g.ToList()}).ToList();
如果您更喜欢lambda表达式,那么
var results = (list.GroupBy(l => l.GroupId, l => new {l.ValueA, l.ValueB})
.Select(g => new {GroupId = g.Key, Values = g.ToList()})).ToList();
这应该根据与其他相关值相关的唯一GroupId
为您提供记录。
修改强>
foreach (var result in results)
{
foreach (var value in result.Values)
{
int valueA = value.ValueA;
int valueB = value.ValueB;
}
}
我认为你正在寻找类似的东西。
希望它有所帮助。
答案 2 :(得分:1)
var groups = list.ToLookup(record => record.GroupId);
var groups1 = groups[1]; //all records with GroupId = 1