gpt4 book ai didi

C# Linq 字符串与 indexOf 比较

转载 作者:太空狗 更新时间:2023-10-29 20:12:37 25 4
gpt4 key购买 nike

我有一个表,其中有一个包含主机名的字符串字段。它们大多是完全合格的域名,但多年来,随着各种 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 中实现这种基于索引的子字符串?

最佳答案

提供给 Entity Framework 的表达式仅限于可以转换为 SQL 的表达式。 EF 不知道如何将 String.IndexOf 翻译成 SQL。

您可以改为使用 SqlFunctions.CharIndex:

SqlFunctions.CharIndex(machineName, ".")

关于C# Linq 字符串与 indexOf 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46346967/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com