后续到: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?
我要去假设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)
我在接受你的建议后得到了同样的结果。现在唯一的'CharIndex'在视图字符串'myView.machine'上。 –
我不得不将视图重做为只存储“分割”机器名称。这让我将LINQ查询改为:'myView.machine.ToUpper()。Equals(machine)'。这让我前进,但我不明白这个问题。也许这只是LINQ和MySQL之间的灰色地带之一。 –
如果你使用.NET的核心我敢打赌,这是因为MySQL。 – Nikolaus