0

テキストフィールドを使用するテーブルで作業していたときにエラーが発生しました。Entity Framework - テキスト列のデータ長を取得する

私は、テキストフィールドに同じクエリ実行する場合、私はしかし

var result = (from t in context.tablename select t.fullname.Length)

を行うことができvarchar列の長さを得ていた場合は、次の

var result = (from t in context.tablename select t.biography.Length)

を私が手エラー:

Argument data type text is invalid for argument 1 of len function

件名に「reading up」というビットがあると、私はSQL Serverがこのエラーを発生させる理由を理解していますが、その最善の方法はわかりません。私は結果を返すことができ、結果の文字列の長さを得ることができますが、確かにこれを行う簡単な方法がありますか?

+0

あなたの質問に対する答えではありませんが、列のデータ型を 'varchar(MAX)'に変更することを検討しましたか? – Seph

+1

@Yuck、いいえ、まったく同じものではありません(1つは[TEXTは推奨されません](http://msdn.microsoft.com/en-us/library/ms143729%28v=SQL.90%)。 @ cephの提案は良いです –

+0

私はこれをタグ付けする必要がありました;それは違いがあれば私はSQL 2008にあります – GrandMasterFlush

答えて

5

私はあなたの最良の選択肢は、それがNTEXTであれば、それはTEXTNVARCHAR(MAX)であればVARCHAR(MAX)に列のデータ型を更新することだと思います。これを行う方法については多くのリソースがありますが、通常は新しい列を[N]VARCHAR(MAX)にして、すべてのデータを新しい列に更新してから古い列を削除し、最後に新しい列の名前を古い名前に変更します。

テーブルスキーマを変更できない場合は、viewを作成し、そのビューの選択で型キャストを行う必要があります。しかし、前述のように列データ型を変更したばかりです(あなたがdbの所有者でなく、別のデータベースにビューを作成していない限り)しかし、EFは常にテーブルと同じようにビューでうまくいくとは限りません。

+0

ありがとう私はテキストが償却されたことに気づいていませんでした(私はSQL 2000からSQL 2008に行きました)。ALTERステートメントで列を変換するのは簡単で、コードは完全に今働いています。 2つの列タイプの違いの概要:http: //stackoverflow.com/a/834863/543538 – GrandMasterFlush

関連する問題