2017-10-18 2 views
0

Ich fragte eine MS SQL-Frage, die beantwortet wurde>here <. Dies ist eine Folgefrage. Im Wesentlichen ist es dasselbe, außer dass die Datenbank MySQL und nicht MS SQL ist und das Objekt der LINQ-Abfrage ein view und keine Tabelle ist.Follow-on zu: C# Linq Zeichenfolge vergleichen mit indexOf

Meine Frage ist jetzt über EF-Abfragen an MySQL-Datenbanken. Ich mache eine sehr ähnliche Abfrage, aber das Backend ist eine MySQL-Datenbank view anstelle einer Tabelle. Ich versuche, die genau die gleiche Konstrukt für die MS SQL-Tabelle und habe verwendet zu verwenden:

in einer MySQL-Datenbank zu einer Ansicht
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 Punkte. machine ist eine Zeichenfolge, die von der Methode übergeben und validiert wird. Ich bekomme die Ausnahme:

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. 

Ist das, weil ich in eine view bin erreicht oder erreichen zu MySQL?

+0

Wenn Sie .net-Core verwenden Ich wette, es liegt an MySQL. – Nikolaus

Antwort

1

Ich werde diese machine anzunehmen, ist eine lokale Variable

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

so brauchen Sie nicht über die SqlFunctions auf dieser Variable verwendet werden:

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

Ich bekomme das gleiche nach Ihrem Rat. Jetzt befindet sich der einzige 'CharIndex' in der View-Zeichenkette' myView.machine'. –

+0

Ich musste die Ansicht überarbeiten, um nur den "Split" -Maschinennamen zu speichern. Das änderte ich die LINQ-Abfrage zu: 'myView.machine.ToUpper(). Entspricht (Maschine)'. Das lässt mich vorwärts gehen, aber ich verstehe das Problem nicht. Vielleicht ist dies nur einer dieser Graubereiche zwischen LINQ und MySQL. –