2012-09-24 127 views
1

如何對字符串執行多個格式化?連字符前刪除前導零和字符串

例如,以下面的方式做不起作用。

var Id = (from p in db.vwIds.Where(p => p.OperationalNumber.Substring(p.OperationalNumber.IndexOf("-") + 1).TrimStart('0') == id) 
           group p by p.ID into g 
           select g.Key).ToList(); 

我不能執行上一個字符串不止一個行動?

通過不工作我的意思是它不是從「vwIds」拉Id。當我將id的值硬編碼爲「001」並刪除「.TrimStart('0')」時,它將引入Id,否則不會。

基本上,我傳遞的ID是一個沒有前導零的數字,例如, 「1」, 「2」, 「112」 等 和ID存在於vwIds是格式: 「JEE - 001」, 「迪 - 002」 等

+0

「不起作用」。什麼對它不起作用?它對我來說看起來完全正確。如果它沒有做你想做的事情,那麼你需要描述你想要它做什麼。 (理想情況下帶有樣本輸入和當前/期望的輸出) – Servy

+0

總是描述「不起作用」。我不知道它是不是編譯或產生錯誤的結果或... –

+0

@Servy,你是對的,我錯誤地閱讀了代碼。 =) –

回答

1

當我硬編碼的id值以「001」

如果你硬編碼到id「001」的它永遠不會等於已.TrimStart('0')呼籲任何ID。假設p.OperationalNumber.IndexOf("-") + 1)評估爲「001」。調用「trimstart」就會變成「1」。 「1」不等於「001」,所以不包括在內。

我的猜測是你需要在ID上調用.TrimStart('0'),或者更好的辦法是將兩個字符串解析成數字,然後比較它們的數值,而不是它們的字符串值。

+0

你說錯了,我試圖刪除前導零,當我比較我的ID,這是行不通的。當我聲明一個變量和硬編碼的id值爲「001」,並從代碼中刪除「TrimStart('0')」,那麼它的工作原理。希望它不會讓你感到困惑 – user793468

0

你可以得到你想要使用多個where子句,我已經試過這是什麼及其工作完美

 var id = db.vwIds.Where(p => p.OperationalNumber.Contains('-')) 
      .Where(p => p.OperationalNumber.Replace(" ", "").Split('-')[1].TrimStart('0') == "23") 
      .GroupBy(p => p.ID).Select(g => g.Key); 

.Contains('-')驗證用戶是否擁有正確的格式「XXX - YYYY」

Replace(" ", "")去除白空格

另一件事,它更好地解析你的id不要把它與一個字符串進行比較,如果你確定所有的OperationalNumbers都包含一個你不需要修剪或替換的int(「」,「」)

 var id = vwIds.Where(p => p.OperationalNumber.Contains('-')) 
      .Where(p =>int.Parse(p.OperationalNumber.Split('-')[1]) == 23) 
      .GroupBy(p => p.ID).Select(g => g.Key);