у меня есть список класса, который содержит еще один список другого класса, например:Выберите эксклюзивный список списка объектов на основе свойств объекта
public class jobs
{
public int jobID {get;set;}
public string jobName {get;set;}
}
public class jobSteps
{
public int stepID {get;set;}
public string stepDescription {get;set;}
public int stepOrder {get; set;}
public List<jobs> jobCollection {get; set;}
}
я могу иметь список N по размерам «jobSteps» , и каждый «jobStep» может иметь N-размерный список «заданий», однако одно и то же «задание» может быть более чем на один шаг, обычно в восходящем «stepOrder».
Как создать список «jobSteps», который содержит только задание на последнем «шаге», которое он присутствует, другими словами, «stepOrder» Max?
У меня есть следующая функция, которая повторяется по каждому списку «jobStep», а затем выбирает только идентификаторы jobID, где они не находятся в более позднем «stepOrder», например.
public class myFunctions
{
public void getJobLatestStep()
{
// Example Data:
List<jobSteps> jobStepCollection = new List<jobSteps>
{
new jobSteps()
{
stepID = 1,
stepDescription = "Start",
stepOrder = 0,
jobCollection = new List<jobs>()
{
new jobs() { jobID = 1, jobName = "Cook food" },
new jobs() { jobID = 2, jobName = "Do laundry" },
new jobs() { jobID = 3, jobName = "Go to work" }
}
},
new jobSteps()
{
stepID = 2,
stepDescription = "Continue",
stepOrder = 1,
jobCollection = new List<jobs>()
{
new jobs() { jobID = 1, jobName = "Cook food" },
new jobs() { jobID = 2, jobName = "Do laundry" }
}
},
new jobSteps()
{
stepID = 3,
stepDescription = "Finalise",
stepOrder = 2,
jobCollection = new List<jobs>()
{
new jobs() { jobID = 2, jobName = "Do laundry" }
}
}
};
List<jobSteps> lastStepOfJob = new List<jobSteps> {};
foreach (jobSteps c in jobStepCollection)
{
jobSteps currentStep = c;
for (int i = jobStepCollection.IndexOf(c); i < jobStepCollection.Count() - 1; i++){
currentStep.jobCollection = currentStep.jobCollection.Where(x => !jobStepCollection[i].jobCollection.Select(z => z.jobID).ToList().Contains(x.jobID)).ToList();
};
lastStepOfJob.Add(currentStep);
};
}
//The desired result would be:
//stepID = 1
//stepDescription = 'Start'
//stepOrder = 0
//jobID = 3
//jobName = 'Go to work'
//stepID = 2
//stepDescription = 'Continue'
//stepOrder = 1
//jobID = 1
//jobName = 'Cook food'
//stepID = 3
//stepDescription = 'Finalise'
//stepOrder = 2
//jobID = 2
//jobName = 'Do laundry'
}
Как я могу написать это с помощью только LINQ, если это возможно, так как у меня будет обрабатывать большие объемы данных в данный момент времени?
Спасибо за редактирование. Это был образец вопроса, который я взял из своего фактического кода (который я не могу опубликовать по причинам интеллектуальной собственности). Пожалуйста, пример очень ценится, так как производительность будет значительным фактором, так как мне нужно будет обрабатывать тысячи записей в день и хранить их. (И я не слишком опытен с Linq, если честно). –