使用LINQ查询获取varchar列的最大值

时间:2013-07-17 04:56:00

标签: sql-server performance linq

我在数据库中有Codevarchar列,其中仅包含数字。我使用下面的方法来获取下一个代码,它工作正常。但我更喜欢在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();
}

2 个答案:

答案 0 :(得分:1)

您可以尝试类似下面的内容,它会按照代码对结果集进行排序,然后获取第一个结果。请注意我没有测试过,但我认为它应该可行。

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

您也可以使用OrderByDescending().First()

代替OrderBy().Last()

答案 1 :(得分:1)

这是我提出的解决方案:

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();