//TODO: use nhibernate join private async void LoadWordsCollection(NHibernate.Criterion.ICriterion expression = null) { var allWords = new List <Word>(); WordsCollection.Clear(); var collection = await WordsService.GetDataAsync <Word>(expression); if (collection != null) { foreach (var item in collection) { if (!allWords.Exists(x => x.Id == item.Id)) { allWords.Add(item); } } } foreach (var item in allWords) { WordsCollection.Add(new WordViewModel { WordToDisplay = item }); } var alreadyAdded = allWords.Count; //only in case of searching it does matter if (expression != null) { var collection2 = await WordsService.GetDataAsync <Translation>(expression); if (collection2 != null) { foreach (var item in collection2) { foreach (var w in item.WordsStoredIn) { if (!allWords.Exists(x => x.Id == w.Id)) { allWords.Add(w); } } } } } foreach (var item in allWords.Skip(alreadyAdded)) { WordsCollection.Add(new WordViewModel { WordToDisplay = item }); } allWords = null; }