2017-10-18 4 views
0

答えがMS SQLの質問>here <に尋ねました。これは後続の質問です。本質的には、データベースがMS SQLではなくMySQLであり、LINQクエリのオブジェクトがviewであり、テーブルではないことを除いて同じです。フォローオン:C#Linq文字列とindexOfの比較

私の質問は、MySQLデータベースへのEFクエリです。私は非常によく似たクエリを実行していますが、バックエンドはテーブルの代わりにviewというMySQLデータベースです。私は、MS SQLテーブルのために使用される正確な同じ構文を使用しようとしていています:

from myView in db.companySessions 
    where myView.machine.ToUpper().Substring(0, 
      (int) SqlFunctions.CharIndex(myView.machine, ".")) 
     .Equals(machine.ToUpper().Substring(0, 
      (int) SqlFunctions.CharIndex(machine.ToUpper(), "."))) 

db.companySessionsポイントをMySQLデータベース内のビューに。 machineは、メソッドに渡され、メソッドによって検証される文字列です。私は例外を取得:私はviewやMySQLへの到達に達していますので

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. 

は、このですか?

+0

は、.NETのコアを使用している場合私はそれがMySQLのためだと賭けるでしょう。 – Nikolaus

答えて

1

私はmachineはそうあなたがその変数にSqlFunctionsを使用する必要はありませんローカル変数

var thisMachineName = SomehowGetMachineName().ToUpper().Split('.').First(); 

であると仮定するつもりです:

from myView in db.companySessions 
where myView.machine.ToUpper().Substring(0, 
     (int) SqlFunctions.CharIndex(myView.machine, ".")) 
    .Equals(thisMachineName) 
+0

あなたのアドバイスを受けた後も同じことが起こっています。唯一の 'CharIndex'はビュー文字列' myView.machine'にあります。 –

+0

「分割された」マシン名だけを保存するためにビューを修正する必要がありました。 LINQクエリを 'myView.machine.ToUpper()。Equals(machine)'に変更しました。それで私は前進することができますが、私はその問題を理解していません。これは、LINQとMySQLの間の灰色の領域の1つに過ぎないかもしれません。 –