問題
次のコードのように LINQ to SQL で NTEXT
型のカラムを where
で扱おうとしても
using(var dc = new DataContext())
{
var NoDescriptionApples = dc.Apples
.Where(i => "" == i.description).ToList(); // NG
...
}
そもそも素の SQL 文上で NTEXT
型の文字列比較はサポートされていない為、実行時エラーになります。
対処方法
NTEXT
型のまま比較しようするから弾かれるので、 Substring()
で比較対象となる文字列より1文字だけ多く切り出して比較します。
using(var dc = new DataContext())
{
var NoDescriptionApples = dc.Apples
.Where(i => "" == i.description.Substring(0, 1)).ToList(); // OK
...
}
C# 上での Substring()
は SQL の SUBSTRING に翻訳され、 SUBSTRING
に NTEXT
型のデータを与えて実行した場合の戻り型は NVARCHAR
型になる為、普通に文字列比較ができるようになります。
その他の対処方法
今回のようなケースではそもそも NTEXT
型の使用を諦めて NVARCHAR
型にしてしまうのが一般的なようです。