using System; using System.Collections.Generic; using System.Linq; namespace SingleOrDefault { class Program { private class JobSource { public string SourceType; public int JobId; public int Id; public string Path; } private static readonly List<JobSource> jobSourceTable = new List<JobSource>{ new JobSource { SourceType = "File", JobId = 1, Id = 1, Path = "C:\\Windows"}, new JobSource { SourceType = "File", JobId = 2, Id = 2, Path = "C:\\Windows"}, new JobSource { SourceType = "Network", JobId = 3, Id = 3, Path = "\\\\mypc\\C$\\Windows"} }; static void Main(string[] args) { string sourceValue = "File"; int jobId = 2; UpdateOrAdd(sourceValue, jobId, "C:\\Temp"); UpdateJobSourceWithFunkyData(); UpdateOrAdd(sourceValue, jobId, "C:\\Program Files"); } private static void UpdateOrAdd(string sourceType, int jobId, string path) { var jobSourcesMatching = from source in jobSourceTable where source.SourceType == sourceType && source.JobId == jobId select source; if (jobSourcesMatching.Any()) { var jobSource = jobSourcesMatching.First(); jobSource.Path = path; } else { jobSourceTable.Add(new JobSource { JobId = jobId, SourceType = sourceType, Path = path }); } } private static void UpdateJobSourceWithFunkyData() { jobSourceTable.Add(new JobSource { SourceType = "File", JobId = 2, Id = 4, Path = "C:\\Users" }); } } }