благодарю вас. никогда не знал о функциях Sql раньше.
я есть таблица со строковым полем, содержащим имена хостов. В основном это полностью квалифицированные доменные имена, но с годами биты домена после первой «точки» менялись, поскольку на нас падали различные изменения DNS. Так что у меня может быть машина "том", которая находится в таблице как:
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(".")))
но визуальная студия жалуется на "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?