none
MVC Dúvida RRS feed

  • Pergunta

  • Boa tarde,

    Necessitava de obter o seguinte resultado numa pesquisa: CategoryID || Count(Searches) || CategoryName usando Entity Framework baseado nas  classes:


        public class Category
        {
            // Primary properties
            public int Id { get; set; }
            public string  Name { get; set; }
            public string SearchPreviewControllerAction { get; set; }
        }
        public class Search
        {
            // Primary properties
            public int Id { get; set; }
            public string SearchTitle { get; set; }
            public string SearchStandard { get; set; }
            public int CategoryId { get; set; }

            // Navigation properties
            public virtual Category Category { get; set; }
        }

      Já consegui implementar o metodo SearchPreview que devolve Searches baseado numa pesquisa do tipo "Aston Martin" que irá procurar em todas as categorias esses termos.

      O desafio aqui é conseguir agora obter o total de registos encontrados com os termos por categoria, ou seja, obter como resultado da pesquisa "Aston Martin" o que ele encontrou em todas as categorias "Auto: 2 | Seeling point: 3 | Shop: 2"

      Tenho um ViewModel SearchPreviewListCategoriesViewModel mapeado com Automapper:

        public class SearchPreviewListCategoriesViewModel
        {
            public int CategoryID { get; set; }
            public string Name { get; set; }
            public string SearchPreviewControllerAction { get; set; }
            public int SearchCount { get; set; }
         }

      Espero que alguém me possa ajudar.

      Obrigado.
     Patrick.

       
    quinta-feira, 11 de outubro de 2012 12:27

Todas as Respostas

  • A dúvida no caso não seria sobre MVC.

    Você pode utilizar o LINQ sobre o resultado obtido.

    No caso, em algum momento você tem uma lsita de Searchs, certo? (Algo como searchs.ToList())

    O que você pode fazer é utilizar o linq

    var searchs = (from s in db.Searchs.Where(SUA BUSCA) group by (AGRUPAMENTO) select new List<Search>);

    Aqui tem vários exemplos de agrupamento:

    http://code.msdn.microsoft.com/LINQ-to-DataSets-Grouping-c62703ea

    Abraços,


    Se sua questão foi respondida, favor marcar.

    André Baltieri
    MTAC – Microsoft Technical Audience Contributor

    Twitter: @andrebaltieri
    Blog: http://andrebaltieri.net
    Site: http://sismat.com.br

    quinta-feira, 11 de outubro de 2012 13:02
  • Bom dia, obrigado pela sua resposta.

    A dificuldade aqui não é só a construção da query, mas sim o incluir o resultado numa class POCO (Categoriy) que não contempla o somatório das pesquisas dos termos na tabela Search:

            public IList<Category> SearchPreviewCategories(String keywords)
            {

                var searchQuery = _searchRepository.Query;

                foreach (string keyword in splitKeywords)
                {
                    searchQuery = searchQuery.Where(p => p.SearchStandard.Contains(keyword));
                }

                var categoryQuery = _categoryRepository.Query;

                var searchResults = (from pc in searchQuery
                                     select pc.Category).Distinct().ToList();

                return searchResults;

    Como posso fazer o count dos registos que contêm as keywords por categoria e incluir isso no retorno do método?

    Obrigado.

    Cumprimentos.

    sexta-feira, 12 de outubro de 2012 09:07