2010-07-15 74 views
1

我有一個字符串名稱的集合,幾個名字以X100,x200,x121爲開始,它有數字值。 我使用LinQ來循環thro,並使用where子句過濾那些具有像x「100」這樣的整數值的名稱。哪種方法能夠完成這一任務? 是有可能使用Func鍵或操作上的項目檢查每串variable.My類型轉換字符串的一部分int int in where子句LinQ C#

其中表達條款看起來像這樣

var columns = from c in factory.GetColumnNames("eventNames") 
           where c.Substring(1) // I dont know what to do next 
           select c; 

。如果接下來的字符串是「c.substring(1 )」整數明顯的名稱是wrong.So有沒有做此項檢查,並返回一個字符串集合

回答

1

要查找包含一個整數的所有字符串,可以使用

var columns = from c in factory.GetColumnNames("eventNames") 
       where Regex.IsMatch(c, @"\d+") 
       select c; 
+0

var columns = from factory.GetColumn中的c名稱(「eventNames」) 其中!Regex.IsMatch(c,@「\ d +」) select c; 感謝你的代碼做到了這一點。 :-)。我的預期結果是不包括那些在「名稱」結果中具有整數值的名稱。 – Webbies 2010-07-15 08:31:37

1

嘗試使用此方法選擇所有像行中所有最好的辦法‘X100’等

int tmp; 
var columns = from c in factory.GetColumnNames("eventNames") 
    where int.TryParse(c.Substring(1), out tmp) 
    select c; 

試試這個來選擇所有的行,將「x100」轉換爲「100」並且保持原樣。

int tmp; 
var columns = from c in factory.GetColumnNames("eventNames") 
    select (int.TryParse(c.Substring(1), out tmp) ? tmp.ToString() : c); 

如果這些都不是你想要的,請澄清。

1

試着這麼做:

var columns = from c in factory.GetColumnNames("eventNames") 
          where CharactersAfterFirstAreInteger(c) 
          select c; 

private bool CharactersAfterFirstAreInteger(string stringToCheck) 
{ 
    var subString = stringToCheck.SubString(1); 
    int result = 0; 

    return int.TryParse(subString, out result); 
} 

這使您可以靈活地改變CharactersAfterFirstAreInteger的簽名,如果你需要,因此您可以執行其他檢查,例如,以便只返回數字部分大於200的值。