internal async Task <dynamic> Get_BookWordsWordsTranslations_DtoAsync(IEnumerable <int> bookWordIds) { var data = await BookWords.Where(t => bookWordIds.Contains(t.Id)) .Join(Words, bw => bw.WordId, w => w.Id, (bw, w) => new { bookWord = bw, word = w }) .Join(Translations, bww => bww.bookWord.Id, t => t.BookWordId, (bww, t) => new { translation = t, bookWord = bww.bookWord, word = bww.word }) .AsNoTracking().ToListAsync(); return(new { words = data.Select(d => d.word).Distinct().Select(w => new WordDto(w)), bookWords = data.Select(d => d.bookWord).Distinct().Select(bw => new BookWordDto(bw)), translations = data.Select(d => d.translation).Distinct().Select(t => new TranslationDto(t)) }); }
public async Task <Tuple <BookWord, Translation> > AddTranslation(int bookID, int wordID, string value, LanguageType language, SpeachPartType speachPart) { // . search for BookWord BookWord bookWordEntity = await BookWords.Include("Translations").SingleOrDefaultAsync(bw => bw.BookId == bookID && bw.WordId == wordID && bw.SpeachPart == (int)speachPart); Translation translationEntity = null; if (bookWordEntity == null) { // . create BookWord if not exists bookWordEntity = new BookWord { BookId = bookID, WordId = wordID, SpeachPart = (int)speachPart }; BookWords.Add(bookWordEntity); await SaveChangesAsync(); } else { // . search for Translation translationEntity = bookWordEntity.Translations.SingleOrDefault(t => t.Value == value && t.Language == (int)language); } // . add Translation if not exists if (translationEntity == null) { translationEntity = new Translation { BookWordId = bookWordEntity.Id, Value = value, Language = (byte)language }; Translations.Add(translationEntity); await SaveChangesAsync(); } return(new Tuple <BookWord, Translation>(bookWordEntity, translationEntity)); }