0

私は LINQ を使用しており、ローカル コンテンツ (英語以外の文字) を格納するための列を含むデータベースがあります。次のようにlinqを使用してクエリを作成したい

var desc = from p in db.GetDesc                            
           where  p.Category.Contains("xxxx".ToString())
           orderby p.Date descending
           select p;

ここでは、Category 列に Unicode 文字列が含まれており、上記のクエリ文字列は機能しません。LINQ で自然言語クエリを使用するにはどうすればよいですか?

4

1 に答える 1

2

一般に、Unicode は、Linq to SQL および Linq to Entities (SQL Server を使用していると思います) に対して正常に動作するはずです。実際、クエリは

var desc = from p in db.GetDesc                            
           where  p.Category.Contains("xxxx")
           orderby p.Date descending
           select p;

「xxxx」はすでに Unicode 文字列であるため、.ToString() を使用する必要はありません。

問題は SQL Server にあるようです。あなたのエチオピア文字を含むテーブルに対してあなたのクエリを試しましたが、あなたが言うようにうまくいきません。.Contains("ስፖርት") を照会すると、すべての行が返されます。

SQL を直接実行しても同じ結果になります。

このような単純なクエリを試行すると失敗します (すべての行が返されます)

select * from TestTable where Title like N'%' + NCHAR(0x1275) + N'%'

ここで、0x1275 は ት 文字の Unicode コード ポイントです。

NCHARのSQL ドキュメントを見ると、4000 までの Unicode コード ポイントのみがサポートされていることがわかります。残念ながら 0x1275 = 4725 であるため、SQL Server (2012 であっても) はエチオピア文字をサポートしていないようです。

4000が限界であることを読んだ後、テストにより、NCHAR(3129)で上記の単純なクエリを実行すると成功することがわかります(私の場合は行が返されません)が、>= 3130は失敗します(すべての行が返されます)。

于 2012-05-05T16:40:48.367 に答える