【问题标题】:Get substring of field using EF and SQL Server使用 EF 和 SQL Server 获取字段的子字符串
【发布时间】: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


【解决方案1】:

如果你觉得生成的SQL效率不高,也可以使用Database。 Sql 查询方法。使用它,您可以使用原始查询。除非您想使用LINQ,否则它也应该是一种不错的方式。

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

不过,如果你能分享生成的sql,那就更有帮助了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-20
    • 2013-04-07
    • 2017-12-10
    • 2014-03-21
    • 2016-07-05
    • 1970-01-01
    • 2020-05-27
    • 2020-03-30
    相关资源
    最近更新 更多