2014-01-09 88 views
0

linq查詢有問題,我想在這裏選擇使用這兩個條件的列名稱。一個是前綴,另一個是前綴的長度。c#中Linq查詢問題

對於離我的山坳名woulb像123_i 123_j 123_k 123_L 123a_i 123a_j 123a_k 123a_l

我有兩個前綴這裏,一個是123等爲123A。我的列名的選擇應該是這樣的:

前綴:123列:123_i 123_j 123_k 123_L

前綴:123A色譜柱:123a_i 123a_j 123a_k 123a_l

我對上述邏輯LINQ查詢低於:

string[] columnnames = (from t in table.Columns.Cast<DataColumn>() 
          where (t.ColumnName.Contains(prefix) && prefix.Length == 3) 
          ||(t.ColumnName.Contains(prefix) && prefix.Length == 4) 
          select t.ColumnName).ToArray(); 

上面的代碼選擇前綴「123」的所有列名稱而不是(123_i 123_j 123_k 123_l)。我嘗試了調試模式,並檢查了where條件爲false的第二部分。但它仍然選擇所有。我可能會在這裏錯過小事!讓我知道如何在Linq工作的OR。

謝謝!

+3

應該不是你的前綴是123_,而不僅僅是123(相同的123a_)?你的前綴長度是4和5 – crunchy

+0

脆脆 - 我不認爲這是問題在這裏。代碼正確選擇列名稱,但條件在這裏無法正常工作。 – Sri

+3

要檢查前綴,您還應該使用'StartsWith'而不是'Contains'。 – Dirk

回答

1

如果總是_字符這應該工作:

var contains = prefix + "_"; 

var names = (from t in table.Columns.Cast<DataColumn>() 
      where t.ColumnName.Contains(contains) 
      select t.ColumnName).ToArray(); 

var names = (from t in table.Columns.Cast<DataColumn>() 
      where t.ColumnName.Contains(prefix + "_") 
      select t.ColumnName).ToArray(); 
0

試試這個,它選擇從列名的前綴和他們進行比較。

string[] columnnames = (from t in table.Columns.Cast<DataColumn>() 
         where (t.ColumnName.Contains(prefix) && t.ColumnName.Split('_')[0] == prefix.Length) 
         select t.ColumnName).ToArray(); 

你也很可能刪除t.ColumnName.Contains(前綴)