后续到:C#Linq字符串与索引比较

后续到:C#Linq字符串与索引比较

问题描述:

我问了一个MS SQL问题,回答了>here <。这是一个后续问题。本质上它是相同的,除了数据库是MySQL而不是MS SQL,并且LINQ查询的对象是view而不是表。后续到:C#Linq字符串与索引比较

我现在的问题是关于对MySQL数据库的EF查询。我正在做一个非常类似的查询,但后端是一个MySQL数据库view而不是一个表。我试图使用用于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是传入并由方法验证的字符串。我得到的例外:

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. 

这是因为我到达view或达到MySQL?

+0

如果你使用.NET的核心我敢打赌,这是因为MySQL。 – Nikolaus

我要去假设machine是一个局部变量

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

,所以你并不需要对变量进行使用SqlFunctions

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之间的灰色地带之一。 –