private void loadLocal_categories(List <string> categoryIds) { var localIds = DbContext.Categories.Local.Select(c => c.AudibleCategoryId); var remainingCategoryIds = categoryIds .Distinct() .Except(localIds) .ToList(); // load existing => local // remember to include default/empty/missing var emptyName = Contributor.GetEmpty().Name; if (remainingCategoryIds.Any()) { DbContext.Categories.Where(c => remainingCategoryIds.Contains(c.AudibleCategoryId) || c.Name == emptyName).ToList(); } }
private void loadLocal_contributors(List <string> contributorNames) { //// BAD: very inefficient // var x = context.Contributors.Local.Where(c => !contribNames.Contains(c.Name)); // GOOD: Except() is efficient. Due to hashing, it's close to O(n) var localNames = DbContext.Contributors.Local.Select(c => c.Name); var remainingContribNames = contributorNames .Distinct() .Except(localNames) .ToList(); // load existing => local // remember to include default/empty/missing var emptyName = Contributor.GetEmpty().Name; if (remainingContribNames.Any()) { DbContext.Contributors.Where(c => remainingContribNames.Contains(c.Name) || c.Name == emptyName).ToList(); } }