2017-09-21 16 views
7

私は、ホスト名を保持する文字列フィールドを持つテーブルを持っています。彼らは主に完全修飾ドメイン名ですが、何年にもわたって、様々なDNSの変更が私たちに与えられているため、最初の "ドット"の後のドメインビットが変更されています。私は、多くの場合、「現在」のホスト名と、この歴史的なストアに対して比較を行う必要があるC#Linq文字列とindexOfの比較

tom.company.com 
tom.it.company.com 
tom.newComapnyBranding.com 
... 

:だから私は、としてテーブルにあるマシン「タム」を持っているかもしれません。

WHERE 
    UPPER(SUBSTRING(@foo, 1, CHARINDEX(".", @foo))) = 
    UPPER(SUBSTRING(myDB.myTable.machineName, 1, CHARINDEX(".", myDB.myTable.machineName))) 

[OK]をこれらのいずれかをLinqクエリに変換しようとしていますが、「インデックス」の部分に遭遇しています。

myTable.machineName.ToUpper().Substring(0, myTable.machineName.IndexOf(".")) 
    .Equals(foo.ToUpper().Substring(0, foo.IndexOf("."))) 

でも、「IndexOf」についてビジュアルスタジオから不満があります。

IndexOf(".", StringComparison.Ordinal)) 

が、私はそれを実行したときに、私は、例外メッセージを取得:それは私はIndexOfメソッドを変更する必要があると主張し

LINQ to Entities does not recognize the method 'Int32 IndexOf(System.String, 
System.StringComparison)' method, and this method cannot be translated into 
a store expression 

をどのようにLINQの中にインデックスを付け基づくサブのこの種を行うのですか?

+1

あなたのフォローの質問では、と他の人を許す、それぞれの質問には依存せず、明確かつ具体的な対象とすることができ、新しい質問に移動してください同じ問題(個別)が解決策に到達する。 –

答えて

7

Entity Frameworkに与えられる式は、SQLに変換できるものに制限されています。 EFはString.IndexOfをSQLに変換する方法を知らない。あなたが代わりにSqlFunctions.CharIndexを使用することができます

SqlFunctions.CharIndex(machineName, ".") 
+0

ありがとうございます。前にSqlFunctionsについて知りませんでした。 –