2013-10-30 45 views
1

我有一個字符串列表,其中包含帶數字的字符。我只是想分割字符串來獲得號碼,後來我需要從分割號碼列表中找到最大號碼。用C#查找字符串列表中的MAX號碼

匹配字符

abc 

實施例列表值

abc9 
abc100 
abc999 
abc 

結果

abc1000 

我曾嘗試下面的代碼

string Result=""; 
var SF = (from site in db.SF where site.Code == "xyz" select site.Line2).FirstOrDefault(); // Here I ll get "abc" 
        int Count = (from Ps in db.Ps where Ps.No.StartsWith(SF) select Ps.No).ToList().Count; 
        if (Count != 0) 
        { 
         var PNo = (from Ps in db.Ps where Ps.No.StartsWith(SF) select Ps.No).ToList().LastOrDefault(); 
         if (PNo != null) 
         { 
          int Val = Convert.ToInt32(PNo.Replace(SF, "")) + 1; // Here I need to get `abc1000` based on the above ex. list. 
          Res = SF + Val.ToString(); 
         } 
        } 
        else 
        { 
         Result = SF + "1"; 
        } 

當我執行的代碼,它總是帶有「abc10」它達到了「abc45」之後。任何幫助提供通用邏輯將不勝感激。

感謝

+2

獲得最大數量從那裏你作爲MAX –

+0

的「abc1000」我正在尋找的例子。當列表中的MAX值爲'abc999'時,我需要獲得'abc1000'。 – DonMax

+1

所以你的意思是'MAX + 1'是你的預期結果 –

回答

2

試試下面的代碼:

var myStrings = new List<string>(); 
      myStrings.Add("abc9"); 
      myStrings.Add("abc100"); 
      myStrings.Add("abc999"); 
      myStrings.Add("abc"); 

      var maxNumber = "abc" + (from myString in myStrings let value = Regex.Match(myString, @"\d+").Value select Convert.ToInt32(value == string.Empty ? "0" : Regex.Match(myString, @"\d+").Value) + 1).Concat(new[] { 0 }).Max(); 
0

使用OrderByDescending()獲得最大數量,然後添加+1導致

var result = (from Ps in db.Ps 
       where Ps.No.StartsWith(SF) 
       select Ps.No) 
      .OrderByDescending(m => m.PS.No) 
      .FirstOrDefault(); 
+0

不..它不工作。 – DonMax

+0

只是加1到一個字符串將無法正常工作 – oerkelens

0

這個怎麼樣?我試過了,它似乎在做你正在描述的內容。

public static string testString(string[] input, string startString) 
    { 
     int max = 0; 
     try 
     { 
      max = input.Where(s => s.StartsWith(startString) && s.Length > startString.Length) 
         .Max(s => int.Parse(s.Replace(startString, string.Empty))); 
     } 
     catch 
     { 
      // no worries, this means max was "abc" without a number 
     } 
     return string.Format("{0}{1}", startString, (max + 1).ToString()); 

    } 

調用它

string test = testString(new string[] { "abc1", "abc123", "abc23", "xyz23" }, "abc"); 
0

請嘗試以下提到的代碼從你的列表

var max = myList.Select(v => int.Parse(v.Substring(3))).Max(); 
相關問題