如何将从此Linq查询中检索到的值检查为.ToLower()?

时间:2017-05-23 06:52:53

标签: c# linq indexof

这是我的代码:

DataRow r = VirtualTable
  .AsEnumerable()
  .FirstOrDefault(tt => (tt.Field<string>("Column1") == value1) ||
                        (tt.Field<string>("Column1") == value2));

此代码检索“Column1”与给定字符串匹配的数据行。然后我对bool if语句进行检查。但是,尽管我可以更改字符串的大小写,但我不知道如何使用Linq给我的值来处理它。还在学习linq,所以我还不知道我的方法。

简而言之,我在表格中输入了字符串“Red box”,但希望将其读作“红色框”,以便它匹配相同值的内部字符串。

此外,我试图检索此查询给我的行IndexOf,但即使找到匹配,我也总是检索​​-1。

以下是检索它的代码:

int SelectedIndex = VirtualTable.Rows.IndexOf(r);

2 个答案:

答案 0 :(得分:5)

尝试string.Equals忽略大小写并重载Select以获取行索引:

   var row = VirtualTable
     .AsEnumerable()
     .Select((tt, index) => new {
        value = tt.Field<string>("Column1"),
        index = index})
     .FirstOrDefault(item => 
        string.Equals(item.value, value1, StringComparison.OrdinalIgnoreCase) ||
        string.Equals(item.value, value2, StringComparison.OrdinalIgnoreCase));

   // If we have the row found, we can get
   if (row != null) {
     var r = row.value;              // value, e.g. "bla-bla-bla"
     int selectedIndex = row.index;  // as well as its index, e.g. 123 
     ... 
   }

答案 1 :(得分:4)

您可以使用String.Equals(string,StringComparisonOption)使用不区分大小写的比较来比较两个字符串。这样可以避免生成另一个临时字符串,如ToLower()所做的那样,例如:

tt.Field<string>("Column1").Equals(value1,StringComparison.OrdinalIgnoreCase)

tt.Field<string>("Column1").Equals(value1,StringComparison.CurrentCultureIgnoreCase)

确保使用适当的比较选项。不同的文化有不同的套管规则。 Ordinal是最快的选择,因为它使用二进制规则比较字符串。