La cadena de C # Linq se compara con indexOf

Tengo una tabla que tiene un campo de cadena que contiene nombres de host. En su mayoría son nombres de dominio totalmente calificados, pero a lo largo de los años los bits de dominio después del primer "punto" han cambiado a medida que varios cambios de DNS han caído sobre nosotros. Entonces podría tener la máquina "tom" que está en la tabla como:

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

A menudo tengo que hacer comparaciones con el nombre de host "actual" y esta tienda histórica. Haciendo algo como:

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

Ok, estoy tratando de convertir uno de estos en una consulta de Linq pero estoy tropezando con la parte de "índice". He llegado tan cerca como:

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

pero visual studio se queja de "IndexOf". Afirma que necesito cambiar el IndexOf a:

IndexOf(".", StringComparison.Ordinal))

pero cuando lo ejecuto me sale el mensaje de excepción:

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

¿Cómo se hace este tipo de subcadena indexada en Linq?

Respuestas a la pregunta(1)

Su respuesta a la pregunta