0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LINQ to SQL の where で NTEXT 型のカラムを扱う方法

Last updated at Posted at 2019-05-21

問題

次のコードのように 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 に翻訳され、 SUBSTRINGNTEXT 型のデータを与えて実行した場合の戻り型は NVARCHAR 型になる為、普通に文字列比較ができるようになります。

その他の対処方法

今回のようなケースではそもそも NTEXT 型の使用を諦めて NVARCHAR 型にしてしまうのが一般的なようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?