c#中的Linq查询问题

时间:2014-01-09 16:10:39

标签: c# linq

遇到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。

谢谢!

2 个答案:

答案 0 :(得分: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();  

答案 1 :(得分: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(前缀)