使用 Linq.Dynamic.Core 在多列中搜索单个值
Search single value in multiple columns with Linq.Dynamic.Core
我的测试用例场景是关于搜索文本框和带有搜索结果的网格。
目前使用以下内容,我只搜索第一列。
foreach (GridColumn s in columns)
{
data = data.Where(string.Format("{0}.Contains(@0)", s.PropertyName), searchValue);
break;
}
正如您已经猜到的那样,如果我删除 break 语句,则不会返回任何结果,因为 foreach
循环之间缺少 OR
语句。
如何使用 Linq.Dynamic.Core
在多个列中搜索单个值?
使用 System.Linq.Dynamic.Core 你可以使用这样的代码:
var xx = new [] { "ax", "bx", "cy", "dz" };
var columns = new[] { "x", "y" };
string query = string.Join(" or ", columns.Select(c => $"it.Contains(\"{c}\")"));
var result = xx.AsQueryable().Where(query);
LinqPad 中的示例:
我的测试用例场景是关于搜索文本框和带有搜索结果的网格。
目前使用以下内容,我只搜索第一列。
foreach (GridColumn s in columns)
{
data = data.Where(string.Format("{0}.Contains(@0)", s.PropertyName), searchValue);
break;
}
正如您已经猜到的那样,如果我删除 break 语句,则不会返回任何结果,因为 foreach
循环之间缺少 OR
语句。
如何使用 Linq.Dynamic.Core
在多个列中搜索单个值?
使用 System.Linq.Dynamic.Core 你可以使用这样的代码:
var xx = new [] { "ax", "bx", "cy", "dz" };
var columns = new[] { "x", "y" };
string query = string.Join(" or ", columns.Select(c => $"it.Contains(\"{c}\")"));
var result = xx.AsQueryable().Where(query);
LinqPad 中的示例: