如何检查从此 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
...
}
这是我的代码:
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
...
}