遇到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。
谢谢!
答案 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(前缀)