【问题标题】:Filtering data by LINQ to SQL通过 LINQ to SQL 过滤数据
【发布时间】:2013-10-29 09:32:36
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 向我们展示您到现在为止的尝试。此外,查看您的表格也会有所帮助。
  • 主表由 id、link、title 和 description 4 列组成。关键字表仅包含 id 和关键字。描述中没有出现的关键词(全部)应该出现。
  • 请检查答案并提供您的反馈

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-22
      • 2014-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多