2013-07-17 41 views
0

我在数据库中有一个Code类型的varchar列,其中只包含数字。我使用下面的方法来获得下一个代码,它工作正常。但我更喜欢所有的计算和类型转换在SQL方面完成,以减少开销。使用下面的代码,我检索所有不需要的数据。任何想法真的很感激。使用LINQ查询来获取varchar列的最大值

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

回答

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

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

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

相反的OrderByDescending().First()你也可以使用OrderBy().Last()

+0

哦,不过这是不行的,因为例如' “111” <99>'while'111> 99' – Yalda

+0

是的,这是有道理的,我读了一个事实,即它是一个varchar而不是int,orderBy会将它按字母顺序排列,因此orderByDescending中的99会比1000更高。 – JanR