2017-10-18 115 views
0

我問了一個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

回答

1

我要去假設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之間的灰色地帶之一。 –