对数据中的多列应用过滤器 table

Apply filter on multiple column in data table

我正在使用的代码

 (DataGridViewAllMusic.DataSource as DataTable).DefaultView.RowFilter = 
 string.Format("Title LIKE '%{0}%' or Artist LIKE '%{1}%' or Album LIKE '%{2}%' or 
 Comments LIKE '%{3}%' ",TextboxSearch.Text, TextboxSearch.Text, TextboxSearch.Text, 
 TextboxSearch.Text);

工作输出:

假设 datagridview 将歌曲信息显示为(左边是歌曲标题,右边是艺术家)

标题 & 艺术家

柔情似水&三度

我在 TextboxSearch 中输入 Life,datagridview 将显示歌曲的详细信息,因为 Life 是在 DataTable 列 标题

现在,如果我搜索 Degree,再次在 DataTable 列 Artist 中找到 Degree,因此 datagridview 将显示相同的结果

所需过滤器:

现在我也想像歌手和歌名一样的方式搜索歌曲。

这样 三度温柔生活如果我在 TextboxSearch 中搜索这个,datagridview 也应该显示与单独搜索标题或艺术家时显示相同的结果

特别感谢@dr.null。我找到了他的 vb.net 代码并在 c# 中使用。效果很好!

 var sb = new StringBuilder();
 var cols = new[] { "Title", "Artist" };
 var words = TextboxSearch.Text.Split(',').Where(x => x.Trim().Length > 0);

 for (var i = 0; i <= cols.Length - 1; i++)
 {
                               
    for (var j = 0; j <= words.Count() - 1; j++)
    {  
         sb.Append($"{cols[i].Trim()} LIKE ' 
         {words.ElementAt(j).Trim()}%'");
         if (j != words.Count() - 1)
            sb.Append(" OR ");
    }
     if (i != cols.Length - 1)
        sb.Append(" OR ");
 }
(DataGridViewAllMusicDark.DataSource as DataTable).DefaultView.RowFilter = 
sb.ToString();