Не уверен относительно производительности, но вы можете использовать GroupBy для группировки ваших данных по идентичным идентификаторам
Что-то вроде:
var result =
from x in whatever
group x by x.Id into g
select new {
Id = g.Key,
Data = g.ToDictionary(i => i.PropertyName, i => i.PropertyValue)
};
См. 101 LINQ Samples , чтобы узнатьбольше о Linq