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

How do I check the values retrieved from this Linq query as .ToLower()?

这是我的代码:

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

此代码检索 'Column1' 与给定字符串匹配的数据行。然后我根据 bool if 语句检查它。但是,虽然我可以更改字符串的大写,但我不知道如何使用 Linq 给我的值来处理它。仍在学习 linq,所以我还不知道自己的出路。

简而言之,我在 table 中有字符串 "Red box",但希望将其读作 "red box",以便它与我的内部字符串具有相同的值。

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

这是检索它的代码:

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

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

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

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

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

尝试 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 
     ... 
   }