簡體   English   中英

如何使用 StingComparison.OrdinalIgnoreCase 和 Contains() 在數據表中查找子字符串?

[英]How do I use StingComparison.OrdinalIgnoreCase and Contains() to find substrings in datatables?

我試圖在數據表的某些列中查找特定的子字符串,並且我想忽略大小寫。 我正在嘗試使用 contains 和 StringCompare 來實現這一點,據我所知我做對了,但我得到了錯誤:

無法從用法推斷出方法“System.Linq.Enumerable.Contains(System.Collections.Generic.IEnumerable, TSource, System.Collections.Generic.IEqualityComparer)”的類型 arguments。 嘗試明確指定類型 arguments。

我已經嘗試了一些你可以在下面看到的東西,我正在爬這個網站的 rest 尋求任何幫助,但似乎沒有任何效果。 我是 c# 的新手,我們將不勝感激。

DataTable everything  = this.Outputs.Results.GetTable();
DataTable trueMatches = new DataTable();
Plan.Variables.HoldCount = everything.Rows.Count;
Plan.Variables.LotFound = 0;

if (Plan.Variables.HoldCount > 0){
    Plan.Variables.LotFound = 1;
    everything.AcceptChanges();
    
    //foreach (DataRow row in everything.Rows){
    for (int i = 0; i < everything.Rows.Count - 1; i++){
        //string hD = row["HOLD_BRIEF_DESCR"].ToString();
        //string rD = row["RELEASE_BRIEF_DESCR"].ToString();
        string hD = everything.Rows[i][20].ToString();
        string rD = everything.Rows[i][23].ToString();
        
        //something wrong with StingComparison.OrdinalIgnoreCase, code compiles if removed
        if (hD.Contains("cube", StringComparison.OrdinalIgnoreCase) || 
            hD.Contains("cubing", StringComparison.OrdinalIgnoreCase) ||
            hD.Contains("cubed", StringComparison.OrdinalIgnoreCase) ||
            rD.Contains("cube", StringComparison.OrdinalIgnoreCase) ||
            rD.Contains("cubing", StringComparison.OrdinalIgnoreCase) ||
            rD.Contains("cubed", StringComparison.OrdinalIgnoreCase)){
                trueMatches.Rows.Add(row);
                row.Delete();
            }
    }
    everything.AcceptChanges();
    trueMatches.AcceptChanges();
}

.net 不提供Contains StringComparison參數的 Contains。 作為快速解決方案,您可以使用IndexOf

hd.IndexOf("cube", StringComparison.OrdinalIgnoreCase) >= 0

或者

using System.Linq;

...

string[] words = new string[] {
  "cube", "cubing", "cubed",
};

// note i < everything.Rows.Count - we should not subtract 1
for (int i = 0; i < everything.Rows.Count; ++i) {
  if (words.Any(word => hD.IndexOf(word, StringComparison.OrdinalIgnoreCase)) ||
      words.Any(word => rD.IndexOf(word, StringComparison.OrdinalIgnoreCase))) {
    //TODO: what is row here? If it's everything.Rows[i] see the code below
    trueMatches.Rows.Add(row);
    row.Delete();
  }
}
...

row可能有問題,如果它是everything.Rows[i]循環應該是

for (int i = 0; i < everything.Rows.Count;) {
  if (words.Any(word => hD.IndexOf(word, StringComparison.OrdinalIgnoreCase)) ||
      words.Any(word => rD.IndexOf(word, StringComparison.OrdinalIgnoreCase))) {
    //TODO: what is row here? If it's everything.Rows[i] see the code below
    var row = trueMatches.Rows[i]; 
    row.Delete();

    trueMatches.Rows.Add(row);
  }
  else
    ++i;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM