Я хочу получить первую строку из текстового поля в таблице SQL Server через EF. У меня есть этот запрос LINQ, чтобы вернуться к первому CRLF или всему тексту, если нет CRLF, но он, похоже, не генерирует наиболее эффективный TSQL.Получить подстроку поля с использованием EF и SQL Server
from f in context.MyTable
select f.TextField.Substring(0, f.TextField.IndexOf(Environment.NewLine) > 0 ?
f.TextField.IndexOf(Environment.NewLine) :
f.TextField.Length)
Есть ли более эффективный способ?
Что заставляет вас думать, что сгенерированный SQL не эффективен? И какой SQL он генерирует? – DavidG
На самом деле теперь, когда я правильно проанализировал SQL, возможно, это не так уж плохо - я сначала увидел «0 + 1» и инструкцию CASE и испугался. Здесь это 'SUBSTRING ([Extent1]. [ErrorMessage], 0 + 1, CASE WHEN (((CAST (CHARINDEX (@ p__linq__1, [Extent1]. [ErrorMessage]) AS int)) - 1)> 0) THEN (CAST (CHARINDEX (@ p__linq__2, [Extent1]. [ErrorMessage]) AS int)) - 1 ELSE CAST (LEN ([Extent1]. [ErrorMessage]) AS int) END) AS [C1] ' – Graeme