благодарю вас. никогда не знал о функциях 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?

 Paulo Coghi19 окт. 2017 г., 01:27
По вашему дополнительному вопросу, пожалуйста, переместите его к новому вопросу, чтобы каждый вопрос был независимым и имел четкую и конкретную тему, позволяя другим людям с той же проблемой (индивидуально) находить решения.

Ответы на вопрос(1)

Решение Вопроса

данные Entity Framework, ограничены теми, которые могут быть переведены в SQL. EF не умеет переводитьString.IndexOf в SQL.

Вы можете вместо этого использоватьSqlFunctions.CharIndex:

SqlFunctions.CharIndex(machineName, ".")
 7 Reeds21 сент. 2017 г., 17:09
благодарю вас. никогда не знал о функциях Sql раньше.

Ваш ответ на вопрос