I have the following class in C#:
class AnalyteUnits {
public string Analyte;
public string Units;
}
So the data comes back looking like:
Analyte = "Ce", Units ="kg"
Analyte = "Fe", Units ="%"
Analyte = "Fe", Units = "g" etc etc
What I need is to shuffle this to look like:
analyte = "Fe", units = {"%", "g"}
How can I achieve this with LINQ?
You can try to GroupBy Analyte
, e.g. given
AnalyteUnits[] data = new AnalyteUnits[] {
new AnalyteUnits() { Analyte = "Ce", Units = "kg" },
new AnalyteUnits() { Analyte = "Fe", Units = "%" },
new AnalyteUnits() { Analyte = "Fe", Units = "g" },
};
You can put
var result = data
.GroupBy(item => item.Analyte, item => item.Units)
.ToDictionary(group => group.Key, group => group.ToArray());
// Let's have a look:
var report = string.Join(Environment.NewLine, result
.Select(pair => $"{pair.Key} : {string.Join(", ", pair.Value)}"));
Console.Write(report);
Another possibility is Lookup
instead of dictionary:
var lookup = data
.GroupBy(item => item.Analyte, item => item.Units)
.ToLookup(group => group.Key, group => group);
// Let's have a look:
var report = string.Join(Environment.NewLine, lookup
.Select(pair => $"{pair.Key} : {string.Join(", ", pair.Value)}"));
Console.Write(report);