2

嗨,我在过滤数据时遇到问题。

我有两张表,一张是存储所有数据的主表。还有另一个表存储关键字以过滤主表中的数据。

我面临的问题是我无法提出所需的确切查询,因为需要过滤掉到达主表数据中的关键字。

例如,如果关键字表中有 10 个单词,则必须通过所有这些关键字搜索主表数据,以便正确过滤掉它。

我希望我已经把问题说清楚了。

我也很欢迎我使用 LINQ TO SQL 解决方案

4

2 回答 2

2

假设您有两个DatatablemainDataTable 和 keyWordTable。使用下面给出的 linq。

var matched = from mainTable in mainDataTable.AsEnumerable()
                      join keyTable in keyWordTable.AsEnumerable() on mainTable.Field<int>("ID") equals keyTable.Field<int>("ID")
                      where !mainTable.Field<string>("Description").Contains(keyTable.Field<string>("KeyWord"))
                      select mainTable;
        if (matched.Count() > 0)
        {
            DataTable finalTable = matched.CopyToDataTable();
        }

备用

另外,这似乎有点脏。

List<string> keywordList = new List<string>();
foreach (DataRow row in keyWordTable.Rows)
{
     keywordList.Add(row["KeyWord"].ToString());
}

DataTable finalFilteredTable = mainDataTable.Clone();
bool check = false;
foreach (DataRow row in mainDataTable.Rows)
{
     check = false;
     string description = row["Description"].ToString();

     foreach (string s in keywordList)
     {
          if (description.Contains(s))
          {
              check = true;
              break;
          }
      }

      if (!check)
      {
          finalFilteredTable.ImportRow(row);
      }
}
于 2013-10-29T10:36:06.623 回答
1

我个人会以不同的方式处理这个问题。

我会从存储关键字的表中获取关键字。然后遍历该列表并建立您的结果列表。

List<tableName>() values = new List<tableNames>();

//Grab Keywords into a list
List<tableWithKey> tableWithKeyWords  = database.tableWithKey.Where(which ones you need....).ToList();
//go through keyword list and pull back all the matches into a list of lists
for(int i = 0; i < tableWithKeyWords.Count(); i ++)
{
    values.addrange(database.tableName.Where(j => j.KeyWord = tableWithKeyWords[i].keyword).ToList());
}
于 2013-10-29T11:00:42.453 回答