通过LINQ to SQL过滤数据

时间:2013-10-29 09:32:37

标签: c# asp.net linq linq-to-sql

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

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

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

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

我希望我的问题清楚。

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

2 个答案:

答案 0 :(得分:2)

假设您有两个Datatable mainDataTable和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);
      }
}

答案 1 :(得分: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());
}