【发布时间】:2014-09-24 10:48:32
【问题描述】:
我想通过 EF 从 SQL Server 表中的文本字段中获取第一行。如果没有 CRLF,我有这个 LINQ 查询可以返回到第一个 CRLF 或所有文本,但它似乎没有生成最有效的 TSQL。
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?
-
实际上,既然我已经正确分析了 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]
标签: sql-server linq entity-framework tsql