2009-05-28 78 views
1

我試圖在linq查詢中拆分字符串。我收到一個錯誤,說「無法識別的表達式節點:ArrayIndex」。有誰知道如何實現這個?我的代碼示例是:在Linq select語句中拆分字符串

List<Task> Result= (from t in TaskDB.Tasks 
             select new Task 
             { 
              Description = t.Description.Split('-')[0].ToString(), 
              Id = ts.id, 
             }).ToList(); 

回答

8

的問題是,您的查詢的select部分不能被轉換成SQL在服務器上執行(因此「無法識別的表達式節點」錯誤)。嘗試這樣的事情,這確保了必要的代碼在客戶端執行:

var result = (from t in TaskDB.Tasks.AsEnumerable() 
       select new Task 
       { 
        Description = t.Description.Split('-')[0].ToString(), 
        Id = ts.id, 
       }).ToList(); 

這裏的技巧是簡單地選擇項目前致電AsEnumerable擴展方法。

2

你真的需要在服務器端進行字符串拆分嗎?除非你真的需要在查詢中使用它,或者如果它將節省大量帶寬以僅傳輸字符串的第一部分,我會在「LINQ to SQL」部分獲取所有內容,然後對其進行後處理與LINQ到對象。事情是這樣的:

List<Task> Result= TaskDB.Tasks.AsEnumerable() // Don't do the rest in SQL! 
           .Select(t => new Task 
     { 
       Description = t.Description.Split('-')[0].ToString(), 
       Id = t.id, 
     }).ToList(); 

(這將是更容易在IDE略有多個列:)良好的格式化