C#中使用Linq进行字符串比较和indexOf函数

8

我有一张表格,其中有一个字符串字段保存了主机名。它们大多数是完全合格的域名,但随着各种DNS更改的影响,第一个“点”后面的域名位已经发生变化多年。所以,我在表格中可能会看到名为“tom”的机器,它的主机名可能如下所示:

tom.company.com
tom.it.company.com
tom.newComapnyBranding.com
...

我经常需要对“当前”主机名和历史存储进行比较。可以采取以下做法:

WHERE
    UPPER(SUBSTRING(@foo, 1, CHARINDEX(".", @foo))) = 
    UPPER(SUBSTRING(myDB.myTable.machineName, 1, CHARINDEX(".", myDB.myTable.machineName)))

好的,我想将其中一个转换为Linq查询,但我在“索引”部分遇到了问题。我已经接近:

myTable.machineName.ToUpper().Substring(0, myTable.machineName.IndexOf("."))
    .Equals(foo.ToUpper().Substring(0, foo.IndexOf(".")))

但是Visual Studio会提示“IndexOf”有问题。它声称我需要将IndexOf更改为:

IndexOf(".", StringComparison.Ordinal))

但是当我运行它时,我收到了异常消息:
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

在Linq中如何进行基于索引的子字符串操作?

1
在您的后续问题中,请将其移至新问题,使每个问题都是独立的,并具有清晰明确的主题,以便其他遇到相同问题的人(单独)能够找到解决方案。 - Paulo Coghi
1个回答

12

Entity Framework只能接受可以转换为SQL语句的表达式,无法将String.IndexOf转换成SQL语句。

您可以使用SqlFunctions.CharIndex代替:

SqlFunctions.CharIndex(machineName, ".")

谢谢。以前从未了解过SqlFunctions。 - 7 Reeds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接