C# 如何将此Linq查询中检索到的值作为.ToLower()进行检查?
这是我的代码:C# 如何将此Linq查询中检索到的值作为.ToLower()进行检查?,c#,linq,indexof,C#,Linq,Indexof,这是我的代码: DataRow r = VirtualTable .AsEnumerable() .FirstOrDefault(tt => (tt.Field<string>("Column1") == value1) || (tt.Field<string>("Column1") == value2)); 您可以使用来使用不区分大小写的比较来比较两个字符串。这避免了像ToLower()那样生成另一个临时字
DataRow r = VirtualTable
.AsEnumerable()
.FirstOrDefault(tt => (tt.Field<string>("Column1") == value1) ||
(tt.Field<string>("Column1") == value2));
您可以使用来使用不区分大小写的比较来比较两个字符串。这避免了像ToLower()
那样生成另一个临时字符串,例如:
tt.Field<string>("Column1").Equals(value1,StringComparison.OrdinalIgnoreCase)
tt.Field(“Column1”).Equals(值1,StringComparison.OrdinalIgnoreCase)
或
tt.Field(“Column1”).Equals(值1,StringComparison.CurrentCultureIgnoreCase)
确保使用适当的比较选项。不同的文化有不同的外壳规则。序号是最快的选项,因为它使用二进制规则比较字符串 尝试
string.Equals
忽略大小写并重载选择获取行的索引:
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
...
}
var行=VirtualTable
.可计算的()
.选择((tt,索引)=>新建{
值=tt.字段(“第1列”),
索引=索引})
.FirstOrDefault(项=>
string.Equals(item.value、value1、StringComparison.OrdinalIgnoreCase)||
string.Equals(item.value、value2、StringComparison.OrdinalIgnoreCase));
//如果我们找到了行,我们可以
如果(行!=null){
var r=row.value;//值,例如“bla-bla-bla”
int selectedIndex=row.index;//及其索引,例如123
...
}
.FirstOrDefault(tt=>(tt.Field(“Column1”).ToLower()==value1)
为什么不使用tt.Field(“Column1”).ToLower()==“red box”
?什么是VirtualTable
?为什么要使用AsEnumerable()
?如果使用EF,字符串比较将不区分大小写。现在,您可以将string.Equals
与不区分大小写的OptionControlstring.Equals(tt.Field(“Column1”),value1,StringComparison.OrdinalIgnoreCase)一起使用
@HimBromBeere在这种情况下,这一点都不重要。一个数据表已经在内存中。为了使用LINQ到数据集,你必须使用AsEnumerable
。这样就不会在内存中加载任何内容了。这就成功了,谢谢!我将在我的数据上测试String.Equals的有效性。@Arvayne:不客气!因为String.Equals
是专门为测试字符串的相等性而设计的,它很有可能成为最有效的方法。
tt.Field<string>("Column1").Equals(value1,StringComparison.CurrentCultureIgnoreCase)
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
...
}