嗨我在过滤数据时遇到问题。
我有两个表,一个是存储所有数据的主表。还有另一个表存储关键字以过滤主表中的数据。
我面临的问题是我无法提出所需的确切查询,因为需要过滤掉到达主表数据的关键字。
例如,如果关键字表中有10个单词,则必须通过所有这些关键字搜索主表数据,以便可以正确过滤掉。
我希望我的问题清楚。
我也非常欢迎使用LINQ TO SQL解决方案
答案 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());
}