コード例 #1
0
        public virtual List <SearchResultCategory> GetRootMatchesByForm(string[] roots)
        {
            var categories = new List <SearchResultCategory>();

            foreach (var rootText in roots)
            {
                var root = _storageService.SetOf <Root>().Include(r => r.RootUsages)
                           .ThenInclude(u => u.Word.WordParts)
                           .ThenInclude(w => w.WordPartType)
                           .SingleOrDefault(r => r.Text == rootText);
                if (root != null)
                {
                    var rootUsages = root.RootUsages.ToList();
                    var wordUsages = rootUsages
                                     .Select(u => new {
                        Usage    = u,
                        FullWord = string.Concat(u.Word.WordParts.Select(p => p.Text))
                    })
                                     .ToList();
                    var groups = wordUsages.GroupBy(w => w.FullWord);
                    foreach (var group in groups)
                    {
                        var category = new SearchResultCategory();
                        category.MatchType = rootText;
                        category.Match     = $"matching root verb \"\u200f{group.Key}\u200e\"";
                        category.Results   = group.Select(x => new VerseResult
                        {
                            SurahNumber    = x.Usage.SurahNumber,
                            VerseNumber    = x.Usage.VerseNumber,
                            WordNumber     = x.Usage.WordNumber,
                            WordPartNumber = x.Usage.WordPartNumber
                        }).OrderBy(x => x.SurahNumber).ThenBy(x => x.VerseNumber).ThenBy(x => x.WordNumber).ToList();
                        categories.Add(category);
                    }
                }
                else
                {
                    var stemText   = rootText;
                    var wordParts  = _storageService.SetOf <WordPart>().Where(w => w.WordPartPositionTypeCode == "STEM" && w.Text == stemText).ToList();
                    var wordUsages = wordParts.Select(u => new { Usage = u, FullWord = string.Concat(u.Word.WordParts.Select(p => p.Text)) }).ToList();
                    var groups     = wordUsages.GroupBy(w => w.FullWord);
                    foreach (var group in groups)
                    {
                        var category = new SearchResultCategory();
                        category.MatchType = stemText;
                        category.Match     = $"matching word \"\u200f{group.Key}\u200e\"";
                        category.Results   = group.Select(x => new VerseResult
                        {
                            SurahNumber    = x.Usage.SurahNumber,
                            VerseNumber    = x.Usage.VerseNumber,
                            WordNumber     = x.Usage.WordNumber,
                            WordPartNumber = x.Usage.WordPartNumber
                        }).OrderBy(x => x.SurahNumber).ThenBy(x => x.VerseNumber).ThenBy(x => x.WordNumber).ToList();
                        categories.Add(category);
                    }
                }
            }
            categories = categories.OrderBy(c => c.MatchType).ThenBy(x => x.Match).ToList();
            return(categories);
        }
コード例 #2
0
        async void SearchResult_ResultCategorySelected(object sender, SearchResultCategory e)
        {
            await Task.Delay(150);

            Func <object, bool> searchFilter = null;

            if (e.Type == SearchResultCategoryType.Stop)
            {
                RouteList.Visibility = Visibility.Collapsed;
                searchFilter         = (o => o is StopModel);
            }
            else
            {
                StopList.Visibility = Visibility.Collapsed;
                searchFilter        = (o => o is RouteGroup && e.RouteTypes.Contains((o as RouteGroup).Type));
            }
            await SetContent(true, searchFilter);

            hadSearch = false;
            ResetSearchResult();
        }
コード例 #3
0
        private static SearchResultCategory GetRootMatches(string[] words, StorageService s)
        {
            IEnumerable <string> verses = null;

            foreach (var word in words)
            {
                var root = s.SetOf <Root>().SingleOrDefault(r => r.Text == word);
                if (root != null)
                {
                    var matches = root.RootUsages.Select(u => u.SurahNumber.ToString("000") + ":" + u.VerseNumber.ToString("000")).ToList();
                    if (verses == null)
                    {
                        verses = matches;
                    }
                    else
                    {
                        verses = verses.Intersect(matches);
                    }
                }
            }
            verses = verses ?? new List <string>();
            verses = verses.Distinct();
            var verseList = verses.ToList();

            verseList.Sort();
            var verseReferences = verseList.Select(v => new { surahNumber = int.Parse(v.Substring(0, 3)), verseNumber = int.Parse(v.Substring(4, 3)) }).ToList();

            var rootMatches = new SearchResultCategory
            {
                MatchType = "matching all root verbs in verse",
                Match     = $" \"\u200f{string.Join("\u200e\", \"\u200f",words)}\u200e\"",
                Results   = verseReferences.Select(v => new VerseResult {
                    SurahNumber = v.surahNumber, VerseNumber = v.verseNumber
                }).ToList()
            };

            return(rootMatches);
        }
コード例 #4
0
 void SearchResult_ResultCategorySelected(object sender, SearchResultCategory e)
 {
     ViewModel.SelectResultCategory(e);
 }