I would use ToDictionary with a predefined set of name names:
private static readonly string[] designationNames = {"PA","A","SA","M","SM","CON"};
void Function()
{
var resultSet = dt.AsEnumerable().Where(x => !String.IsNullOrEmpty(x.Field<String>("Project_Code")))
.Select(x =>
new
{
Month = x.Field<String>("Month"),
ProjectCode = x.Field<String>("Project_Code"),
Designations = designationNames.ToDictionary(d => d, d => x.Field<int>(d))
}
);
}
This is a normalized version. If you want it to be flat, use:
private static readonly string[] designationNames = {"PA","A","SA","M","SM","CON"};
void Function()
{
var resultSet = dt.AsEnumerable().Where(x => !String.IsNullOrEmpty(x.Field<String>("Project_Code")))
.Select(x =>
designationNames.Select(
d =>
new
{
Month = x.Field<String>("Month"),
ProjectCode = x.Field<String>("Project_Code"),
Designation = d,
Count = x.Field<int>(d)
}
)
).SelectMany(x => x).ToList();
}
If the type is not always int, you can use x.Field<String>(d)and check its validity instead .
source
share