嗨,我在过滤数据时遇到问题。
我有两张表,一张是存储所有数据的主表。还有另一个表存储关键字以过滤主表中的数据。
我面临的问题是我无法提出所需的确切查询,因为需要过滤掉到达主表数据中的关键字。
例如,如果关键字表中有 10 个单词,则必须通过所有这些关键字搜索主表数据,以便正确过滤掉它。
我希望我已经把问题说清楚了。
我也很欢迎我使用 LINQ TO SQL 解决方案
嗨,我在过滤数据时遇到问题。
我有两张表,一张是存储所有数据的主表。还有另一个表存储关键字以过滤主表中的数据。
我面临的问题是我无法提出所需的确切查询,因为需要过滤掉到达主表数据中的关键字。
例如,如果关键字表中有 10 个单词,则必须通过所有这些关键字搜索主表数据,以便正确过滤掉它。
我希望我已经把问题说清楚了。
我也很欢迎我使用 LINQ TO SQL 解决方案
假设您有两个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);
}
}
我个人会以不同的方式处理这个问题。
我会从存储关键字的表中获取关键字。然后遍历该列表并建立您的结果列表。
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());
}