2014-09-24 2 views
0

Я хочу получить первую строку из текстового поля в таблице 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) 

Есть ли более эффективный способ?

+1

Что заставляет вас думать, что сгенерированный SQL не эффективен? И какой SQL он генерирует? – DavidG

+0

На самом деле теперь, когда я правильно проанализировал 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

ответ

0

Если вы думаете, что сгенерированный SQL неэффективен, вы также можете использовать базу данных. Метод запросов Sql. Используя это, вы можете использовать свой необработанный запрос. Если вы не хотите использовать LINQ, это тоже должно быть достойно.

context.Table.SqlQuery("SELECT --- FROM dbo.Table").ToList(); 

Хотя, если бы вы могли поделиться сгенерированным sql, то это было бы более полезно.

Смежные вопросы