コードが2〜4文字で始まる文字列であり、スペースがある場合とない場合があり、数値がある列を持つテーブルがあります。例:KR123またはKS23またはK23456。SQL Server 2008の次のSQLコードは、数値のみを返します。
Select CONVERT(int, Reverse(LEFT(REVERSE(codefield),PATINDEX('%[a-z]%', REVERSE(codefield)) - 1)))
From Table1
これはSQLでうまく機能しますが、私が一緒に仕事をしているプログラマーの1人は、LINQtoEntitesを使用して同じことをしたいと考えています。最初の行から反転フィールドのインデックス値を取得できるかどうかを確認するために、VB.Netでこのコードを試しました。
Dim theResult = theContext.Table1.select(function(y)
System.Data.Objects.SQLClient.SQLFunctions.PatIndex("%[a-z]%", y.codefield.Reverse)
).FirstOrDefault
正常にコンパイルされますが、実行時にエラーが発生します。LINQtoEntitiesはメソッド'System.Collections.Generic.IEnumerable 1[System.Char] Reverse[Char](System.Collections.Generic.IEnumerable
1 [System.Char])'メソッドを認識せず、このメソッドをストア式に変換できません。 。
.Reverseを削除すると機能しますが、コードが正しく機能するには、列データを逆にすることができる必要があります。
LINQ to Entitiesを使用して元の選択を行う方法を誰かが理解できますか?
ありがとう、NCGrimbo