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
与不区分大小写的OptionControl
string.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 
     ... 
   }