简体   繁体   中英

Using a foreach loop on LINQ query for searching

Hi I have a record called Tags in a table called Knowledgebase (KB) in my DB. The words in Tags are separated by commas. Also in the KB table is a field called Title.

I need to match the tags field to the Title so I have replaced all the commas in the tags with spaces like so string removeCommas = commas.Replace(",", " "); .

I think I now need to loop around every record in the KB table to find records? I would like to store the number of matches it finds in a variable called suggestions.

Question is what is the best way to implement the for each loop for a query like this? Is the for each loop the best method for this task?

One way is to store the space seperated strings in a List. Now, use Foreach loop for the whole table and in turn a foreach loop for each record to find the match of Title.

Yes Linq can help you to retreive the data from your database and then replacing it after a foreach loop

Code Added

Let say you are using EDM and you have a context kb:

public void ReplaceCommaInTag(KbContext kb)
 {
    var tags = from t in kb.Titles
               Select t.Tags;

    foreach(Tag tag in tags)
     {
      tag = tag.Replace(","," ");
     }

    try
    {
     kb.SubmitChanges();
    }

    catch(Exception e)
    {
    //Display the error.
    }
}

I hope it will help you

I will correct my answer if this is going the wrong direction, but would something like this complete the operation you are attempting?

System.Data.DataTable KB = new System.Data.DataTable();
string[] tags = "some,foo,bar".Split(',');
System.Collections.Generic.List<string> suggestions = new System.Collections.Generic.List<string>();

for (int i = 0; i < tags.Length; i++)
{
    for (int j = 0; j < KB.Rows.Count; j++)
    {
        string row = KB.Rows[j]["Title"].ToString();
        if ((row.Contains(tags[i]))
        {
            suggestions.Add(row);
        }
    }
}

Also, avoid foreach whenever humanly possible. Check out THIS post to see why.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM