2009-05-28 41 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略有多个列:)良好的格式化