2012-04-09 42 views
1

LINQ to Entities無法識別方法'System.String ToString()'方法,並且在嘗試運行以下代碼時,此方法無法轉換爲存儲表達式

var result = from c in db.brand 
      where c.title.contains("test") 
      select c.title + "-" +c.brand; 

List<string> lst = r.ToList(); 

它給出了以下錯誤。

LINQ實體無法識別方法「System.String 的ToString()」方法,和這種方法不能被翻譯成存儲 表達。

+0

這解釋了爲什麼會發生這種情況 - http://stackoverflow.com/questions/1228318/ linq-int-to-string – StuartLC 2012-04-09 09:15:59

回答

5

我建議取標題和品牌在一個匿名類型,然後執行字符串連接進程:

var list = db.Brand.Where(c => c.Title.Contains("test")) 
        .Select(c => new { c.Title, c.Brand }) 
        .AsEnumerable() // Rest of the query in-process 
        .Select(x => x.Title + " " + x.Brand) 
        .ToList(); 
1

試試這個:

var result = from c in db.brand where c.title.contains("test") select c; 
var finalResult = result.ToList().Select(ss=> ss.title + "-" + ss.brand); 
+2

你需要再次調用'ToList' *來得到一個似乎是需要的'List '。此外,只有真正需要標題和品牌時,這將獲取每個實體的所有*屬性。最後,不需要調用'ToList'作爲中間步驟 - 'AsEnumerable'可以避免創建中間列表。 – 2012-04-09 09:10:51

+0

ToList或AsEnumerable在此之後強制執行通過datacontext的查詢,String函數將可用於收集。 Good catch Jon,thx – 2012-04-09 09:17:50

-1

嘗試:

var result = from c in db.brand where c.title.contains("test") select new { c.title + "-" +c.brand } 
+1

使用匿名類型在這裏不會有幫助 - 而且代碼甚至不會編譯,因爲匿名類型中的屬性沒有名稱。 – 2012-04-09 09:09:45

+1

是的,你是對的。在這裏確實吸取了教訓:經常測試答案! – Roger 2012-04-09 09:13:17

相關問題