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

Sql server 使用LINQ查询获取varchar列的最大值,sql-server,performance,linq,Sql Server,Performance,Linq,我在数据库中有一个code列,类型为varchar,它只包含数字。我使用下面的方法来获取下一个代码,它运行良好。但我更喜欢所有的计算和类型转换都在SQL端完成,以减少开销。使用下面的代码,我检索所有不需要的数据。任何想法都值得赞赏 public string GetNextCode(int type) { var codeList = (from o in ObjectQuery where o.Type == Type

我在数据库中有一个
code
列,类型为
varchar
,它只包含数字。我使用下面的方法来获取下一个代码,它运行良好。但我更喜欢所有的计算和类型转换都在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();
}
公共字符串GetNextCode(int类型)
{
var codeList=(来自ObjectQuery中的o)
其中o.Type==Type
选择o.Code).ToList();
List=codeList.Select(int.Parse.ToList();
int nextDL=list.Max()+1;
返回nextDL.ToString();
}

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

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

您还可以使用
OrderBy().Last()
而不是
OrderByDescending().First()
,这是我提出的解决方案:

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();
var max=(从ObjectQuery中的o开始)
让num=ObjectQuery.Where(i=>i.Type==Type)。选择(i=>i.Code)。Cast().Max()
选择num).FirstOrDefault()+1;
返回最大ToString();

哦,但这不起作用,因为例如
“111”<“99”
111>99
是的,这是有道理的,我仔细阅读了一个事实,它是一个varchar而不是int,orderBy会将其按字母顺序排列,因此99在orderbydown中比1000高。