Учитывая этот запрос linq к контексту данных EF:
var customers = data.Customers.Where(c => c.EmailDomain.StartsWith(term))
Вы ожидаете, что он будет производить SQL, как это, верно?
SELECT {cols} FROM Customers WHERE EmailDomain LIKE @term+’%’
Ну, вообще-то, он делает что-то вроде этого:
SELECT {cols} FROM Customer WHERE ((CAST(CHARINDEX(@term, EmailDomain) AS int)) = 1)
Знаешь почему?
Кроме того, замена селектора Where на:
c => c.EmailDomain.Substring(0, term.Length) == term
он работает в 10 раз быстрее, но все равно выдает довольно неприятный SQL.
ПРИМЕЧАНИЕ: Linq to SQL правильно переводит StartsWith в Like {term}%, а nHibernate имеет выделенное выражение LikeExpression.