【问题标题】:using LINQ query to get max of a varchar column使用 LINQ 查询获取 varchar 列的最大值
【发布时间】:2013-07-17 04:56:00
【问题描述】:

我在数据库中有一个varchar 类型的Code 列,其中仅包含数字。我使用下面的方法来获取下一个代码,它工作正常。但我更喜欢在 SQL 端完成所有计算和类型转换,以减少开销。使用下面的代码,我检索了所有不需要的数据。任何想法都非常感谢。

public string GetNextCode(int type)
{
    var codeList = (from o in ObjectQuery
                     where o.Type == Type
                     select o.Code).ToList<string>();

    List<int> list = codeList.Select(int.Parse).ToList();
    int nextDL = list.Max() + 1;

    return nextDL.ToString();
}

【问题讨论】:

    标签: sql-server performance linq


    【解决方案1】:

    您可以尝试类似下面的方法,它按代码降序排列结果集,然后获取第一个结果。请注意,我没有对此进行测试,但我认为它应该可以工作。

    var codeList = (from o in ObjectQuery
                         where o.Type == Type
                         select o.Code).OrderByDescending(
                                 x => x.Code).First()
    

    你也可以使用OrderBy().Last()代替OrderByDescending().First()

    【讨论】:

    • 哦,但这行不通,例如"111" &lt; "99"111 &gt; 99
    • 是的,这是有道理的,我读到它是一个 varchar 而不是 int 并且 orderBy 会将其按字母顺序排列,因此 orderByDescending 中的 99 会高于 1000。
    【解决方案2】:

    这是我想出的解决方案:

    var max = (from o in ObjectQuery                       
               let num = ObjectQuery.Where(i => i.Type == Type).Select(i => i.Code).Cast<int>().Max()
               select num).FirstOrDefault() + 1;
    
    return max.ToString();
    

    【讨论】:

      猜你喜欢
      • 2013-10-02
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多