private void SolveNakedSubset() { foreach (FieldContainer fieldContainer in fieldContainers) { for (int i = 2; i < 9; i++) { var fieldTuple = fieldContainer.GetFields().Where(field => field.CountPossibleValues() == i); if (fieldTuple.Count() >= i) { Dictionary <string, List <Field> > fieldGrouping = new Dictionary <string, List <Field> >(); List <Field> fieldsWithEqualPossible = null; foreach (Field field in fieldTuple) { if (fieldGrouping.TryGetValue(field.PossibleValuesToString(), out fieldsWithEqualPossible)) { fieldsWithEqualPossible.Add(field); } else { List <Field> newFieldGroup = new List <Field>(); newFieldGroup.Add(field); fieldGrouping.Add(field.PossibleValuesToString(), newFieldGroup); } } // mit Linq aus fieldGrouping diejenigen selektieren, welche i Einträge haben var searchResult = fieldGrouping.Values.Where(group => group.Count == i); if (searchResult.Count() > 0) { HashSet <Field> containerFieldsHS = new System.Collections.Generic.HashSet <Field>(fieldContainer.GetFields()); containerFieldsHS.ExceptWith(searchResult.First()); foreach (Field field in containerFieldsHS) { field.RemovePossibleValues(searchResult.First().First().GetPossibleValues()); } } } } } }