【问题标题】:follow-on to: C# Linq string compare with indexOf后续:C# Linq 字符串与 indexOf 比较
【发布时间】:2017-10-18 23:48:55
【问题描述】:

我问了一个 MS SQL 问题,得到了回答 >hereview 而不是表。

我现在的问题是关于对 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?

【问题讨论】:

  • 如果你使用 .net Core,我敢打赌是因为 MySQL。

标签: c# mysql linq


【解决方案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)

【讨论】:

  • 在听取了您的建议后,我得到了同样的结果。现在唯一的CharIndex 在视图字符串myView.machine 上。
  • 我不得不重新设计视图以仅存储“拆分”机器名称。这让我将 LINQ 查询更改为:myView.machine.ToUpper().Equals(machine)。这让我继续前进,但我不明白这个问题。也许这只是 LINQ 和 MySQL 之间的灰色地带之一。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-27
  • 1970-01-01
  • 2021-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多