在LINQ查询上使用foreach循环进行搜索

时间:2014-03-21 16:49:58

标签: c# linq

您好我的数据库中有一个名为Knowledgebase(KB)的表中有一个名为Tags的记录。标签中的单词用逗号分隔。 KB表中还有一个名为Title的字段。

我需要将标记字段与标题匹配,因此我已使用string removeCommas = commas.Replace(",", " ");之类的空格替换标记中的所有逗号。

我想我现在需要遍历KB表中的每个记录来查找记录?我想将它找到的匹配数存储在一个名为advice的变量中。

问题是为这样的查询实现每个循环的最佳方法是什么? for each循环是这项任务的最佳方法吗?

3 个答案:

答案 0 :(得分:0)

一种方法是将空格分隔的字符串存储在List中。现在,对整个表使用Foreach循环,然后为每个记录使用foreach循环来查找Title的匹配。

答案 1 :(得分:0)

是的Linq可以帮助您从数据库中检索数据,然后在foreach循环后替换它

已添加代码

假设您正在使用EDM并且您有上下文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.
    }
}

我希望它能帮到你

答案 2 :(得分:0)

如果这是错误的方向,我会纠正我的答案,但这样的事情会完成你正在尝试的操作吗?

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);
        }
    }
}

此外,只要有可能,请避免foreach。查看THIS帖子了解原因。