2013-10-29 101 views
2

嗨我有一个问题,同时过滤我的数据。通过LINQ to SQL过滤数据

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

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

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

我希望我已经明确了这个问题。

而且我使用LINQ to SQL解决方案中它是最欢迎

+1

向我们展示你到现在为止所尝试的。另外,看到你的表格会有所帮助。 – germi

+0

主表由4列id,链接,标题和描述组成。关键字表只包含id和关键字。 应出现没有出现在描述中的关键字(全部)。 –

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

备用

而且otherway这似乎有点脏。

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

就我个人而言,我会以不同的方式来解决这个问题。

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

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