2017-10-18 18 views
0

J'ai posé une question MS SQL à laquelle on a répondu>here <. Ceci est une question de suivi. En substance, c'est la même chose sauf que la base de données MySQL n'est pas MS SQL et que l'objet de la requête LINQ est un view et non une table.suite à: Chaîne Linq C# comparer avec indexDe

Ma question concerne maintenant les requêtes EF aux bases de données MySQL. Je fais une requête très similaire mais le backend est une base de données MySQL view au lieu d'une table. Je suis en train d'utiliser exactement la même construction utilisé pour la table MS SQL et ai:

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 points une vue dans une base de données MySQL. machine est une chaîne transmise et validée par la méthode. Je reçois l'exception:

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. 

Est-ce parce que je suis dans un view atteins ou à atteindre MySQL?

+0

Si vous utilisez .net base Je parie que c'est à cause de MySQL. – Nikolaus

Répondre

1

Je vais supposer que machine est une variable locale

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

donc vous ne devez utiliser la SqlFunctions sur cette variable:

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

Je reçois la même chose après avoir suivi vos conseils. Maintenant, le seul 'CharIndex' est sur la chaîne de vue' myView.machine'. –

+0

J'ai dû retravailler la vue pour ne stocker que le nom de la machine "split". Cela me permet de changer la requête LINQ en: 'myView.machine.ToUpper(). Equals (machine)'. Cela me permet d'aller de l'avant mais je ne comprends pas le problème. Peut-être que c'est juste une de ces zones grises entre LINQ et MySQL. –