[英]MVC Entity Framework Count
我想建立一個類似的結果: CategoryID || 計數(搜索)|| CategoryName基於兩個基於Entity Framework的類:
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; }
}
我已經做了一個SearchPreview方法,該方法基於“ Aston Martin”之類的搜索返回搜索結果,該搜索將在所有類別中都使用單詞“ Aston Martin”。
現在的挑戰是構建一種方法,該方法在搜索關鍵字“阿斯頓·馬丁”之后返回,其中的類別中包含那些包含計數在內的關鍵字,例如“自動:2 |沸點:3 |商店:2”。
我試圖避免對每個類別進行查詢以計算“搜索”條目的數量,並且我想找到一個GroupBy解決方案,該解決方案采用已經執行的SearchPreview方法並提取其中包含的GroupBy類別。
我正在使用ViewModel SearchPreviewListCategoriesViewModel
使用Automapper從模型進行映射:
public class SearchPreviewListCategoriesViewModel
{
public int CategoryID { get; set; }
public string Name { get; set; }
public string SearchPreviewControllerAction { get; set; }
public int SearchCount { get; set; }
}
希望somoeone可以幫助我。
謝謝。
問候,
帕特里克
不確定您的匹配方式如何,但也許像這樣
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表的上下文訪問。
找到問題的解決方案:
第1步:
創建一個數據傳輸對象以獲取Domain對象並將其傳遞到Presentation Web Layer:
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>();
第三步:
傳遞CategoryName,按類別計數和ControllerAction名稱的方法,該方法將傳遞每個Category列表的列表:
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獲得的所有幫助來解決此難題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.