2014-01-09 90 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(前缀)