2016-11-04 52 views
2

我試圖獲取一個列值,並將其轉換爲格式化字符串值的列表,我想下面的代碼LINQ選擇格式化值作爲一個LIST

List<string> _names = (from p in context.RakHolders select 
    string.Format("{0},{1}", p.Name.Split(',')[0].Trim(), p.Name.Split(',')[1].Trim())) 
    .ToList(); 

我的目的是讓名字的列表與列逗號之間沒有多餘的空間名稱

在執行這條線

「System.NotSupportedException」類型的異常我得到異常出現在 實體Framework.SqlServer.dll但在用戶代碼中沒有處理

其他信息:LINQ實體無法識別方法
「System.String格式(System.String,System.Object的,System.Object的)」方法, 並且此方法無法轉換爲商店表達式。

我怎樣才能使這項工作[格式化獲取列值的列表]與LINQ

+0

因爲它無法轉換爲T-SQL,所以Linq to Entities無法識別它。在'RakHolders'之後添加'AsEnumerable()'可能會有所幫助。檢查這個http://stackoverflow.com/questions/34061637/linq-to-entities-does-not-recognize-the-method-system-web-mvc-fileresult –

+0

嘗試在上下文之後添加'.AsEnumerable()'。 RakHolders' – Pikoh

回答

3
List<string> _names = (from p in context.RakHolders select p.Name) 
    .ToList() 
    .Select(name => name.Split(',')) 
    .Select(nameSplitted => string.Format("{0},{1}", nameSplitted[0].Trim(), nameSplitted[1].Trim())) 
    .ToList(); 

說明:「的String.format」不能轉換爲SQL所以,首先我們需要兌現列表與第一個'ToList()'(在這裏我們得到名稱列表,它比實現完整實體更有效)。在內存中列出你可以將它轉換爲你需要的形式。

1

EF正試圖在SQL-Server上執行表達式。如果您首先獲取這些項目,它應該不會是一個問題:

List<string> _names = context.RakHolders 
    .Select(r => r.Name) 
    .ToList() 
    .Select(p => p.Split(',')) 
    .Select(s => string.Format("{0},{1}", s[0].Trim(), s[1].Trim()) 
    .ToList();