I've created a list of instances of an object, to give sample data. I've then created a list of IGrouping, containing the objects. Within the foreach, I'm then trying to give an ordering number for the objects within their respective groups (this for each only assigns a value where the value should be 1). Within the nested foreach, I want to compare a property of the current object ('subItem') to a property of the group it's within ('item'). I can't seem to find the syntax for it. The issue is the 'if' conditional, where it says '//problem here' at the end of the line.
My code is as below:
The properties themselves are list. So for example the 2nd and 3rd objects both have the 'item' value of 2. Where the item value is the same, I want to compare the lists attached to the object. For the 2nd and 3rd items, the lists look like this:
And so because 'in3' has no values found in 'out2', it should be allocated a value of 1. Conversely, because 'in2' has a value found in 'out1' it should not.
Any help would be appreciated.
My code is as below:
Context:
List<Job> rawJobList = new List<Job>();
rawJobList.Add(new Job("ProjectBriefCreation", "ProjectOwner", "Owner", null, in1, out1, 1));
rawJobList.Add(new Job("ProjectManagement", "ContractsManager", "GeneralContractor", "Owner", in2, out2, 2));
rawJobList.Add(new Job("DesignManagement", "DesignContractsManager", "DesignContractor", "Owner", in3, out3, 2));
rawJobList.Add(new Job("BuildingDesign", "LeadArchitect", "ArchitecturalPractice", "DesignContractor", in4, out4, 3));
rawJobList.Add(new Job("StructuralDesign", "StructuralEngineer", "StructuralEngineeringPractice", "DesignContractor", in5, out5, 3));
rawJobList.Add(new Job("Drywalling", "Carpenter", "Carpentry", "GeneralContractor", in6, out6, 3));
rawJobList.Add(new Job("Plastering", "Plasterer", "PlasteringAndPainting", "GeneralContractor", in7, out7, 3));
rawJobList.Add(new Job("Painting", "Painter", "PlasteringAndPainting", "GeneralContractor", in8, out8, 3));
List<IGrouping<int, Job>> jobsByLevelNumber = rawJobList.GroupBy(j => j.OrganisationLevelNumber).ToList();
List<Job> toBeDiscarded = new List<Job>();
List<Job> alreadyAdded = new List<Job>();
Dictionary<Job, int> allocateNumberOnLevel = new Dictionary<Job, int>();
foreach (var item in jobsByLevelNumber)
{
foreach (var subItem in item)
{
if (!subItem.OrderedCustomInputName1.Any() && subItem.OrganisationType != "Owner")
{
toBeDiscarded.Add(subItem);
}
if (!item.Any(i => i.OrderedCustomOutputName1 == subItem.OrderedCustomInputName1))
{
allocateNumberOnLevel.Add(subItem, 1);
alreadyAdded.Add(subItem);
}
}
}
The properties themselves are list. So for example the 2nd and 3rd objects both have the 'item' value of 2. Where the item value is the same, I want to compare the lists attached to the object. For the 2nd and 3rd items, the lists look like this:
List properties:
List<string> in2 = new List<string>(); in2.Add("c"); in2.Add("e");
List<string> out2 = new List<string>(); out2.Add("g");
List<string> in3 = new List<string>(); in3.Add("c"); in3.Add("d");
List<string> out3 = new List<string>(); out3.Add("e"); out3.Add("f");
And so because 'in3' has no values found in 'out2', it should be allocated a value of 1. Conversely, because 'in2' has a value found in 'out1' it should not.
Any help would be appreciated.
Last edited: