2013-07-17 42 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