在Linq select语句中拆分字符串

时间:2009-05-28 16:02:36

标签: linq linq-to-sql

我试图在linq查询中拆分字符串。我收到错误说“无法识别的表达式节点:ArrayIndex”。有谁知道如何实现这一目标?我的代码示例是:

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

2 个答案:

答案 0 :(得分: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扩展方法。

答案 1 :(得分: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中很容易格式化:)