1

次のような結果を作成したいと思います。カウント (検索) || 2 つの Entity Framework ベースのクラスに基づくCategoryName :

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; }
}

「Aston Martin」という単語を含むすべてのカテゴリで検索される「Aston Martin」のような検索に基づいて検索結果を返す SearchPreview メソッドを既に作成しました。

ここでの課題は、「Aston Martin」というキーワードを検索した後、「Auto: 2 | Seeling point: 3 | Shop: 2」のようなカウントを含むキーワードが含まれるカテゴリを返すメソッドを構築することです。

検索エントリの数をカウントするために各カテゴリのクエリを回避しようとしています。既に実行されている SearchPreview メソッドを取得し、それに含まれるGroupByカテゴリを抽出するGroupByソリューションを見つけたいと思います。

SearchPreviewListCategoriesViewModelAutomapper を使用してモデルからマッピングするために ViewModelを使用しています。

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

誰かがこれについて私を助けてくれることを願っています。

ありがとうございました。

よろしく、

パトリック。

4

2 に答える 2

0

どのようにマッチングしているかはわかりませんが、おそらくこのようなものです

from c in aCategories where c.Search.Any(s => s.SearchStandard.Contains("Aston Martin") == true) select new SearchPreviewListCategoriesViewModel { CategoryID = c.Id, Name = c.Name, SearchPreviewControllerAction = c.SearchPreviewControllerAction, SearchCount = (c.Search.Where(s => s.SearchStandard.Contains("Aston Martin") == true)).Count() };

ここで、aCategoriesは、Categoryテーブルへのコンテキストアクセスです。

于 2012-10-11T13:39:14.463 に答える
0

問題の解決策が見つかりました:

ステップ1:

ドメイン オブジェクトを受け取り、それをプレゼンテーション Web レイヤーに配信するためのデータ転送オブジェクトの作成:

public class SearchCategoriesListDto
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string SearchPreviewControllerAction { get; set; }
    public int SearchCount { get; set; }
}

ステップ2:

プレゼンテーション層での DTO と ViewModel 間のマッピングの再構築:

Mapper.CreateMap<SearchCategoriesListDto, SearchCategoriesListViewModel>();

ステップ 3:

CategoryName、Count by Category、および各 Category リストのリストを配信する ControllerAction Name を配信するメソッド:

    public IList<SearchCategoriesListDto> SearchPreviewCategories(String keywords)
    {

        string keywordsClean = keywords;

        keywordsClean = keywordsClean.ToUpper();
        keywordsClean = StringUtils.StringSimbolsRemove(keywordsClean, HeelpResources.StringSymbolsToCleanFrom, HeelpResources.StringSymbolsToCleanTo);

        string[] splitKeywords = keywordsClean.Split(new Char[] { ' ' });

        var searchQuery = _searchRepository.Query;

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

        var categoryQuery = _categoryRepository.Query;

        var query = from sq in searchQuery
                    join cq in categoryQuery on sq.CategoryId equals cq.Id
                    select new SearchCategoriesListDto { 
                        Name = cq.Name, 
                        SearchCount = searchQuery.Where(c => c.CategoryId == cq.Id).Count(), 
                        SearchPreviewControllerAction = cq.SearchPreviewControllerAction 
                    };

        var searchResults = query.Distinct().ToList();

        return searchResults;

}

この課題を解決するために StackOverlow から得たすべての支援に感謝します。

于 2012-10-16T12:34:52.080 に答える