2009-05-28 23 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できれいにフォーマットすることが容易になるだろう:)