2016-07-07 65 views
2

我有一個搜索功能的需求之間的分貝行, 編輯:搜索就像是一套VARCHAR處理的通常這個ID包含像C001,C002值,...聲明變量分裂字符串在C#和搜索這些字符串

因此,如果用戶正在輸入像C001-C010這樣的範圍,它應該搜索oracle數據庫中所有在C001-C010之間的行,這就是我的要求。

如果用戶在文本框中這應該splited爲兩個變量輸入一些像範圍C001-C010,它應該在搜索這個範圍之間的所有元素。

如何做到這一點。我認爲使用枚舉範圍我們可以做到這一點,但我面臨的問題,如分裂字符串需要聲明爲單獨的變量和搜索之間。我無法實現。

示例代碼如下。

  else if (!_search.MultipleId.Contains('-')) 
      { 
       filterExp = filterExp.And(x => x.Id.Contains(_search.MultipleId)); 
      } 
+1

你的問題不清楚。要分割字符串,你可以簡單地使用'var searchstrings = _search.MutlipleId.Split(' - ')',但是你打算用結果數組中的值搜索的內容沒有定義。請澄清你的問題。 – crunchy

+0

要添加@crunchy所說的內容,我們還需要了解您正在搜索的字段。我目前看到的答案採用了生成一組可能的字符串並搜索它們的方法;但是,如果搜索字段可以作爲整數搜索,則使用該範圍生成大於/小於搜索的效率會更高。 – Daniel

+0

嗨@crunchy正確編輯這個問題,請你再檢查一遍。 –

回答

0

像這樣的東西可能會有所幫助:

var pair = yourstring.Split('-') 
     .Select(a => new { one= a[0], two= a[1]}); 
+0

這將在'-'位置分割,創建2列'one'和'two',但它也會在列中創建包含第1,第2,第3 ...個字符的多行,這不是什麼問。順便說一句。有一個額外的右括號'''你需要刪除。 – Matt

0

如果ID是CXXX的格式,那麼你可以做這樣的事情:

if(_search.MultipleId.Contain("-")) 
{ 
var range = _search.MultipleId.Split('-'); 
filterExp = filterExp.And(x => x.Id >= range[0] && x.Id <= range1); 
} 
+0

這裏Id是字符串,所以我不能使用邏輯運算符。對不起,現在我不清楚的問題,現在我編輯相同的,你可以請檢查它。 –

0

不知道你們的業務需求,你可以嘗試這樣的事:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var items = new List<string> { "C001", "C010" }; 
     var firstChar = new List<string>(); 
     var remainingChars = new List<string>(); 

     items.ForEach(i => 
     { 
      firstChar.Add(i[0].ToString()); 
      remainingChars.Add(i.Substring(1)); 
     }); 

     firstChar.ForEach(f => { Console.Write(f + " "); }); 
     Console.WriteLine(); 
     remainingChars.ForEach(r => { Console.Write(r + " "); }); 
     Console.WriteLine(); 

     //Prints the following 
     //C C 
     //001 010 
     //Press any key to continue . . . 
    } 
} 
0

我會將數據集轉換爲列表,以便使用開始和結束參數的索引。

 var items = dataset.ToList(); 

     var searchString = "B1, C10"; 
     var removedWhitespace = Regex.Replace(searchString, @"\s+", ""); 

     var rangeToSearch = removedWhitespace.Split(','); 

     var startPosition = items.FindIndex(x => x.ID == rangeToSearch.First()); 
     var endPosition = items.FindIndex(x => x.ID == rangeToSearch.Last()); 

     var selectedItems = 
      items.Skip(startPosition).Take(endPosition - startPosition + 1); // +1 to include the original id's 

如果你有,你可以對列表進行排序,而是一個需要注意這種方法是將名單按字母順序排序,所以你可能需要做一些額外的處理,以確保返回所有的值範圍。