2014-05-25 82 views
0

代碼在我EFService:投的IList <int>到IList的<string>

private IDbSet<Item> _Items; 
    private int _SearchTakeCount = 10; 
    public IList<string> SearchByArticleCount(int articleCount) 
     { 
      return _Items.AsNoTracking().Where(m => m.Articles.Count().Equals(articleCount)) 
       .Take(_SearchTakeCount) 
       .Select(m => m.Articles.Count().ToString()) 
       .Distinct() 
       .ToList(); 
     } 

代碼在我的控制器:

public virtual ActionResult AutoCompleteSearch(string term, KeywordSearchBy searchBy = KeywordSearchBy.Name) 
     { 
      IList<string> data = new List<string>(); 
     switch (searchBy) 
     { 
      case ItemSearchBy.Name: 
       data = _ItemService.SearchByName(term); 
       break; 
      case ItemSearchBy.ArticleCount: 
       int articleCount = Convert.ToInt32(term); 
       data = _ItemService.SearchByArticleCount(articleCount); 
       break; 
     } 
當我運行異常計提壞賬項目

。 此例外是: LINQ to Entities不能識別方法'System.String ToString()'方法,並且此方法不能轉換爲存儲表達式。

+0

正如一個側面說明 - 你在做什麼是一個「轉換」,而不是「中投」。鑄造不會更改變量的實例,轉換會創建新變量的全新實例。 – Enigmativity

回答

4

ToString()呼叫作爲LINQ到對象的查詢,EF部分完成後:

public IList<string> SearchByArticleCount(int articleCount) 
{ 
    return _Items.AsNoTracking().Where(m => m.Articles.Count().Equals(articleCount)) 
     .Take(_SearchTakeCount) 
     .Select(m => m.Articles.Count()) 
     .Distinct() 
     .AsEnumerable() 
     .Select(x => x.ToString()) 
     .ToList(); 
} 
+0

本質上EF不知道如何將數值轉換爲字符串。上述解決方案將起作用。此外,您可以嘗試在http://stackoverflow.com/questions/4502842/int-to-string-in-entity-framework中提到的解決方案 – filtercoffee

相關問題