using System.Collections.Generic;
public static void Main()
var jobs = new Jobs("F1");
jobs.Add("O1", "P1", "V1");
jobs.Add("O1", "P2", "V2");
jobs.Add("O2", "P3", "V3");
jobs.Add("O2", "P4", "V4");
jobs.Add("O2", "P5", new Task("V5"));
jobs.Add("O2", "P6", new Task("V6"));
jobs.Add("O1", "P7", new Task("V7"));
jobs.Add("O1", "P8", new Task("V8"));
Console.WriteLine(JsonConvert.SerializeObject(jobs));
Console.WriteLine(JsonConvert.SerializeObject(jobs.GetByProductId("P9")));
public string FactoryName { get; private set; }
public Dictionary<string, Dictionary<string, List<Task>>> Tasks { get; private set; } = new Dictionary<string, Dictionary<string, List<Task>>>();
public Jobs(string factoryName)
FactoryName = factoryName;
public void Add(string orderId, string productId, Task task)
if(!Tasks.TryAdd(orderId, new Dictionary<string, List<Task>>() {{ productId, new List<Task>() { task }}})) {
if(!Tasks[orderId].TryAdd(productId, new List<Task>() {task})) {
Tasks[orderId][productId].Add(task);
public void Add(string orderId, string productId, string field)
Add(orderId, productId, new Task(field));
public List<Task> GetByProductId(string productId)
var productDict = Tasks.Values.SingleOrDefault(x => x.ContainsKey(productId));
return (productDict == null) ? null : productDict.GetValueOrDefault(productId);
public string Field { get; private set; }
public Task(string field)