嗨我有一个问题,同时过滤我的数据。通过LINQ to SQL过滤数据
我有两张表,一张是存储所有数据的主表。还有另一个表格存储关键字以过滤来自主表格的数据。
我面临的问题是,我无法提出所需的确切查询,因为需要将主表数据中到达的关键字过滤掉。
例如,如果在关键字表中有10个单词,那么必须通过所有这些关键字来搜索主表数据,以便它可以被正确地过滤掉。
我希望我已经明确了这个问题。
而且我使用LINQ to SQL解决方案中它是最欢迎
嗨我有一个问题,同时过滤我的数据。通过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();
}
备用
而且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);
}
}
就我个人而言,我会以不同的方式来解决这个问题。
我会从存储关键字的表中抓取关键字。然后遍历该列表并建立结果列表。
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());
}
向我们展示你到现在为止所尝试的。另外,看到你的表格会有所帮助。 – germi
主表由4列id,链接,标题和描述组成。关键字表只包含id和关键字。 应出现没有出现在描述中的关键字(全部)。 –
请检查答案并提供您的反馈 –