代码之家  ›  专栏  ›  技术社区  ›  sipsorcery

Linq to SQL表达式从文本列获取最大数值

  •  1
  • sipsorcery  · 技术社区  · 14 年前

    我有一个nvarcharsql列,它主要包含数字值。我试图想出一个L2S表达式,在忽略任何非数值的情况下得到最大数值。

    执行此任务的SQL是:

    select top 1 value from identifier where and patindex('%[^0-9]%', value) = 0 order by CAST(value AS INT) desc
    

    我可以使用什么LINQ表达式来实现相同的目标?

    1 回复  |  直到 14 年前
        1
  •  5
  •   mattmc3    14 年前

    您可以使用 SqlMethods 在里面 System.Data.Linq.SqlClient

    (from a in identifier
    where !SqlMethods.Like(a.value, "%[^0-9]%")
    select a).Max(x => Convert.ToInt64(x.value))
    

    此Linq语句根据LinqPad变为此查询:

    -- Region Parameters
    DECLARE @p0 VarChar(8) = '%[^0-9]%'
    -- EndRegion
    SELECT MAX([t1].[value]) AS [value]
    FROM (
        SELECT CONVERT(BigInt,[t0].[value]) AS [value], [t0].[value]
        FROM [Identifier] AS [t0]
        ) AS [t1]
    WHERE NOT ([t1].[value] LIKE @p0)
    

    LinqPad是一种很好的查询方式,可以用来查看您是否能够获得所需的内容。我发现,只有一些SQL语句没有很好的L2S等价语句,它们带有PIVOT关键字。除此之外,通常有办法得到你想要的。

    如果需要整个记录,而不仅仅是MAX()值,可以通过以下方式进行查询:

    (from a in Accounts
    orderby (!SqlMethods.Like(a.AccountNumber, "%[^0-9]%") ?
                          Convert.ToInt64(a.AccountNumber) : 0)
    descending
    select a).Take(1)