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高。